【发布时间】:2021-09-08 15:22:43
【问题描述】:
我试图在水平 GridView 或 ListView 内的两行中显示目录列表
而不是单行,列表数据来自服务器
水平 ListView 与一行工作正常
我怎样才能像下面的 GIF 一样做到这一点?
下面的图片我有什么
下面的 gif 我需要什么
下面的完整代码水平 ListView 与一行工作正常,我需要将其转换为 GridView 以便它可以显示两行和水平滚动
_catList() {
return Container(
height: 150,
child: ListView.builder(
itemCount: catList.length < 10 ? catList.length : 10,
scrollDirection: Axis.horizontal,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsetsDirectional.only(end: 10),
child: GestureDetector(
onTap: () async {
if (catList[index].subList == null ||
catList[index].subList.length == 0) {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ProductList(
name: catList[index].name,
id: catList[index].id,
tag: false,
updateHome: widget.updateHome),
));
if (mounted) setState(() {});
} else {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SubCat(
title: catList[index].name,
subList: catList[index].subList,
updateHome: widget.updateHome),
));
if (mounted) setState(() {});
}
},
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsetsDirectional.only(bottom: 5.0),
child: new ClipRRect(
borderRadius: BorderRadius.circular(25.0),
child: new FadeInImage(
fadeInDuration: Duration(milliseconds: 50),
image: NetworkImage(
catList[index].image,
),
height: 100.0,
width: 100.0,
fit: BoxFit.cover,
imageErrorBuilder: (context, error, stackTrace) =>
erroWidget(100),
// errorWidget: (context, url, e) => placeHolder(50),
placeholder: placeHolder(100),
),
),
),
Container(
child: Text(
catList[index].name,
style: Theme.of(context).textTheme.caption.copyWith(
color: colors.fontColor,
fontWeight: FontWeight.w600,
fontSize: 15),
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
),
width: 100,
),
],
),
),
);
},
),
);
}
【问题讨论】: