首页 > 解决方案 > Streambuilder 没有在 Flutter 中更新

问题描述

我正在使用 Streambuilder 并从 firebase 加载快照。加载快照后,我将数据放入创建小部件结构的 Post.dart 中。我的代码可以获取数据,但是当我从火力库中删除帖子时,它仍然显示相同的帖子,但最后一个消失而不是删除的帖子。但是,如果我更改页面并返回,正确的页面将被删除,一切都很好。所以我认为flutter知道我正在改变我的firebase,但不知道如何将它映射到我的帖子中。任何想法?

 StreamBuilder(
              stream: FirebaseFirestore.instance
                      .collection("timeline")
                      .doc(widget.currentUser.id)
                      .collection('timelinePosts')
                      .orderBy('timestamp', descending: true)
                      .snapshots()
              builder: (BuildContext context,
                  AsyncSnapshot<QuerySnapshot> streamSnapshot) {
                var items = streamSnapshot.data != null &&
                        streamSnapshot.data.docs != null
                    ? streamSnapshot.data.docs
                    : [];

                List<Post> posts =
                    items.map((doc) => Post.fromDocument(doc)).toList();

                return !streamSnapshot.hasData ||
                        streamSnapshot.connectionState ==
                            ConnectionState.waiting
                    ? Center(
                        child: CircularProgressIndicator(),
                      )
                    : Column(
                        children: posts);
              })

和 Post 就像

 @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
      ...
      ],
    );
  }

标签: firebasefluttergoogle-cloud-firestorestream-builder

解决方案


我放弃 2 美分可能有点晚了,但您可以尝试将此代码添加到您的帖子小部件中:

@override
void didUpdateWidget(Post oldWidget) {
 //add the code you want it to update inside your Post widget.
 super.didUpdateWidget(oldWidget);
}

推荐阅读