Flutter как обновить Listview.builder, если данные изменены

#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