listview - 颤动 listView.Builder 隐藏最后一个列表项的分隔符
问题描述
使用 ListView.Builder 创建列表时,如何在最后一项中隐藏分隔符?
为每个项目添加分隔符相当容易,但是在列表中的最后一项上取消分隔符的逻辑是什么?
没有具体的 stackoverflow 问题以及实现此任务的具体示例。
Widget build(BuildContext context) {
return
ListView.builder(
shrinkWrap: true,
physics: ScrollPhysics(),
itemCount: OffersList.length,
itemBuilder: (context, index) {
Offer item = OffersList[index];
return ListItem(context, item);
},
);
}
Widget ListItem(BuildContext context, Offer item) {
if ( index == OffersList.length - 1) {
dividerChecker = EmptyContainer();
} else {
dividerChecker = Divider();
}
return Column(
children: <Widget>[
OfferListItem(
offerData: item,
status: status,
userType: userType,
),
dividerChecker,
],
);
}
建议的解决方案:
使用 ListView.separator 而不是 ListView.Builder:
ListView.separated(
separatorBuilder: (BuildContext context, int index) => new Divider(),
shrinkWrap: true,
physics: ScrollPhysics(),
itemCount: OffersList.length,
itemBuilder: (context, index) {
Offer item = OffersList[index];
return offerListItem(context, item);
},
),
Widget offerListItem(BuildContext context, Offer item) {
return Column(
children: <Widget>[
OfferListItem(
offerData: item,
status: status,
userType: userType,
),
],
);
}
解决方案
您可以ListView.separated()
用于动态创建的列表或 ListTile.divideTiles 用于简短的静态列表。这些方法都没有在最后一个列表项之后添加分隔符。
ListTile.divideTiles
ListView(
children: ListTile.divideTiles( // <-- ListTile.divideTiles
context: context,
tiles: [
ListTile(
title: Text('Horse'),
),
ListTile(
title: Text('Cow'),
),
ListTile(
title: Text('Camel'),
),
ListTile(
title: Text('Sheep'),
),
ListTile(
title: Text('Goat'),
),
]
).toList(),
)
ListView.separated
ListView.separated(
itemCount: 100,
itemBuilder: (context, index) {
return ListTile(
title: Text('$index sheep'),
);
},
separatorBuilder: (context, index) {
return Divider();
},
)
这将为每个项目返回两个小部件,最后一个项目除外。separatorBuilder
用于添加分隔符。
如果您确实想要在最后一项之后有一个分隔符,请参阅我更完整的答案。
推荐阅读
- python - Python 3:如果字符串长于
- ios - 如何在 GetStream iOS Activity Feed 组件中添加头像图像?
- git - Git 和备份本地提交
- servlets - servlet 中的全局变量
- eclipse - 在 Eclipse 中卸载 Code Recommenders 插件
- python - 为什么我的错误没有被except捕获?
- c# - 为多个 idMso 重用相同的上下文菜单
- php - 如何为方形订单项添加说明?
- python - 在列表中创建子列表
- android - 为什么我无法通过 https://play.google.com/apps/publish/ 登录 Google Play 来发布 Android 应用程序?