Я пытаюсь получить данные из Firestore и отобразить их на карточках, используя ListView.builder
. У меня есть логическое значение isAvailable
, с помощью которого я могу sh реорганизовать порядок данных. Если это правда, он помещается вверху списка, если он ложный, он помещается внизу списка. Итак, вот частичный код,
Предположим, у меня есть класс User с соответствующими полями Firebase. Когда я вызываю эту функцию фильтра, добавляю экземпляры User и запускаю программу, список повторяется около 12 раз. Однако, если я не фильтрую содержимое и просто использую ListView.builder
как есть, то он отображается правильно.
Предположим, userTile
возвращает карту с пользовательским содержимым внутри.
По какой-то причине функция фильтра вызывается несколько раз, и поэтому списки добавляются также несколько раз. Есть ли работа вокруг этого? Я хочу отобразить доступный контент вверху и контент notAvailable внизу в указанном порядке.
Я также попытался использовать счетчик и убедиться, что фильтр не будет работать несколько раз, как это
int count = 0
, включая for l oop с if (count < users.length)
и добавлением count = count + 1
в конце.
Однако, похоже, это тоже не решает проблему.
Я не вызывал userTile в списке notAvailable, потому что я хочу, чтобы он сначала работал с доступным списком.
List notAvailableData = [];
List availableData = [];
List orderedList = [];
void filterContent(List users) {
for (int i = 0; i < userData.length; i++) {
User userData = users[i];
if (userData.isAvailable == true) {
available.add(userData);
} else {
notAvailable.add(userData);
}
}
}
@override
Widget build(BuildContext context) {
final users = Provider.of<List<User>>(context) ?? [];
filterContent(users);
return ListView.builder(
itemCount: available.length,
itemBuilder: (context, index) {
return _userTile(context, available[index], index);
},
);
}
}