flutter listView.Builder скрыть разделитель на последнем элементе списка - PullRequest
0 голосов
/ 06 октября 2018

Как можно скрыть разделитель в последнем элементе при создании списка с помощью ListView.Builder?

Довольно просто добавить разделитель для каждого элемента, но какова логика, чтобы отклонять разделитель в последнем элементе вlist?

Нет конкретного вопроса о переполнении стека с конкретным примером реализации этой задачи.

   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,
    ),
  ],
);

}

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Вы можете использовать ListView.separated() для динамически создаваемого списка или ListTile.divideTiles для короткого статического списка.Ни один из этих методов не добавляет разделитель после последнего элемента списка.

ListTile.divideTiles

enter image description here

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

enter image description here

ListView.separated(
  itemCount: 100,
  itemBuilder: (context, index) {
    return ListTile(
      title: Text('$index sheep'),
    );
  },
  separatorBuilder: (context, index) {
    return Divider();
  },
)

Возвращает два виджета для каждого элемента, кроме последнего элемента.separatorBuilder используется для добавления разделителя.

Если вам нужен разделитель после последнего элемента, см. Мой более полный ответ .

0 голосов
/ 07 ноября 2018

Это можно легко сделать с помощью ListView.separated()

...