Itembuilder не выполняется в streambuilder при обновлении данных в firestore - PullRequest
0 голосов
/ 09 октября 2019

Когда я запускаю приложение в первый раз, оно загружает все элементы в анимированный список. Но когда я добавляю элемент в хранилище, потоковый строитель понимает, что что-то произошло. НО он не выполняет itembuilder, поэтому новые элементы не будут отображаться. Однако, если я перезапущу приложение, новые элементы будут загружены. Если бы я просто изменил имя существующего элемента в базе данных пожарного магазина, он перестроился бы без проблем.

Когда я обновляю элемент. Я должен получить карту задач и заменить ее новой копией, в которой есть элемент, и опубликовать / обновить ее в Firestore.

Я перепробовал все, что мог придумать, не понимаю, почему это происходит. Я напечатал в itembuilder и вижу, что он не выполняется при обновлении.

Widget _buildTasksList() {

    return new Expanded(
      child: new StreamBuilder(
      stream: Firestore.instance
          .collection("lists")
          .document(tasklist.postID)
          .snapshots(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (!snapshot.hasData) {
          return new Text("Loading");
        }
        var listdata = snapshot.data;
        tasklist.tasks = listdata['tasks'];
        tasklist.owners = listdata['owners'];
        tasklist.sorter = listdata['sorter'];
        return new AnimatedList(
          initialItemCount: convertToTaskList(listdata['tasks']).length,
          key: _listKey,
          itemBuilder: (context, index, animation) {
            return new TaskRow(
              task: this.listModel[index],
              animation: animation,
              listModel: this.listModel,
              tasklist: tasklist,
              onChange: () => _onChange(this.listModel[index]),
            );
          },
        );
      },
    )
    );
  }

1 Ответ

0 голосов
/ 11 октября 2019

Получилось, сбросив мой _listKey, добавил это перед анимированным списком. _listKey = null;_listKey = new GlobalKey ();

...