#flutter #listview #auto-update #stream-builder
#flutter #listview #автоматическое обновление #stream-builder
Вопрос:
Я работаю с ListView.builder в Flutter. На данный момент все работало нормально, у меня есть следующие строки кода в методах обратного вызова:
@override
void initState(){
items = new List();
for(int index = 0; index < dataList.length; index ){
items.add(...creating widget ..);
}
}
@override
Widget build(BuildContext context) {
return Container(
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: dataList.length,
itemBuilder: (BuildContext context, int index) {
return Container(
width: width,
height: 160 ,
key: UniqueKey(),
padding: EdgeInsets.all(10),
child: items[index],
);
},
),
);
}
Проблема заключается в том, что когда данные dataList обновляются, как мне реализовать этот список, чтобы список обновлял пользовательский интерфейс, если значения данных обновлены, удалены или место изменено. Является ли StreamBuilder решением?
Комментарии:
1. в вашем случае это dataList, верно?
2. @jitsm555 да, извините!
Ответ №1:
Если они постоянно меняются, используйте StreamBuilder
Например:https://bendyworks.com/blog/a-month-of-flutter-rendering-a-list-view-with-stream-builder
Если нет, то вы можете использовать FutureBuilder
Например:https://medium.com/nonstopio/flutter-future-builder-with-list-view-builder-d7212314e8c9
или,
Если dataList получает изменения внутри приложения (удалить / обновить), затем вызовите setState()
, который обновит ListView
Комментарии:
1. Постоянно меняется, но я решил эту проблему с помощью ChangeNotifier в определении класса элементов dataList. Проблема заключается в том, когда эти элементы удаляются или изменяется индекс. Какой вариант я должен использовать?
2. как они удаляются или изменяются? это делается внутри приложения или на сервере?
3. Внутри приложения, в зависимости от взаимодействия с пользователем.
4. поэтому всякий раз, когда изменяется dataList, вам просто нужно вызвать setState(), он обновит listview