簡體   English   中英

Streambuilder 未在 Flutter 中更新

[英]Streambuilder is not updating in Flutter

我正在使用 Streambuilder 並從 firebase 加載快照。 加載快照后,我將我的數據放入 Post.dart,在那里我制作了小部件結構。 我的代碼可以獲取數據,但是當我從 firebase 中刪除其中一個帖子時,它仍然顯示相同的帖子,但最后一個消失而不是已刪除的帖子。 但是,如果我更改頁面並返回,則刪除正確的頁面,一切正常。 所以我認為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>[
      ...
      ],
    );
  }

您需要為帖子項小部件提供唯一鍵,以便在 flutter 重建列時,能夠區分舊帖子和新帖子列表。 基本上它與顫振決定如何重建某些元素以及何時重建有關。

如果你想測試一個唯一的鍵是否可以解決問題,我通常首先為 post 小部件分配一個這樣的鍵:

key: Key("${Random().nextDouble()}"),

看看這是否會改變什么。 如果它修復了它,您可以嘗試更有效的鍵,例如每個元素的屬性的組合。

我放棄我的 2 美分可能有點晚了,但是您可以嘗試將此代碼添加到您的 Post Widget:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM