[英]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.