listview - flutter 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 用于添加分隔符。

如果您确实想要在最后一项之后添加分隔符,请参阅我的 fuller answer .

关于listview - flutter listView.Builder 隐藏最后一个列表项的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52677267/

相关文章:

ios - 如何在 Flutter 中实现可滚动的 Canvas ?

flutter - 如何使用flutter firebase_ml_vision插件实时读取字符或条

dart - 根据条件添加小部件

android - Flutter:如何让外部应用程序打开文件(如Android的隐式 Intent

dart - 带有命名路线的 flutter 持久导航栏?

asynchronous - 在特定时间等待 future

animation - 如何为 Sprite 设置动画以移动到 flutter 的任意点?

string - Flutter:是否可以仅在传递给文本小部件之前在字符串中格式化(粗体、斜体等)?

dart - 如何在 flutter 图像选择器中将图像添加到 Firestore

android - 如何在 Flutter 中使用设备的默认字体?