Flutter Listview 复制随机元素而不是在新数据上添加新元素
Flutter Listview duplicates random element instead of adding new element on new data
我正在尝试使用 Flutter 和 Firebase 创建类似 feed 的东西,我想按 'postedAt' 值对 post 进行排序,但问题是当我使用 collection.orderBy( ) 它不能正常工作。它将新的 post 添加到提要的随机位置,并为其提供随机现有 post 的 imageURL(或者我认为它只是复制提要中的一项)。我在 Firebase 创建了索引我尝试了两种索引类型 none 工作。奇怪的是,当我从 phone 添加新的 post 时,当我添加完成时它工作正常但是当在另一个 phone 上列出时它显示描述的行为。
编辑:当我热重载时它工作正常(最后添加的 post 显示在顶部)
编辑:当我删除 orderBy 方法时,问题仍然存在。
StreamBuilder(
stream: FirebaseFirestore.instance
.collection("users")
.doc(FirebaseAuth.instance.currentUser.uid)
.collection("posts")
.orderBy('postedAt', descending:true)
.snapshots(),
builder: (BuildContext context,AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
if (snapshot.hasError) {
print("error:" + snapshot.error.toString());
}
List<Post> posts = [];
posts = snapshot.data.docs.map((postDoc) {
return Post.fromDoc(postDoc);
}).toList();
if (posts.isEmpty) {
return Center(
child: Text("No posts"),
);
}
return ListView.builder(
cacheExtent: 4000,
itemCount: posts.length,
itemBuilder: (BuildContext context, int index) {
return PostWidget(
post: posts[index],
);
},
);
},
)
我的索引:
Composite index
single index
文档截图:
document ss
我解决了这个问题。
我认为如果它是复制元素,可能无法将它们分开。并将关键参数添加到 PostWidget
所以它起作用了。
我正在尝试使用 Flutter 和 Firebase 创建类似 feed 的东西,我想按 'postedAt' 值对 post 进行排序,但问题是当我使用 collection.orderBy( ) 它不能正常工作。它将新的 post 添加到提要的随机位置,并为其提供随机现有 post 的 imageURL(或者我认为它只是复制提要中的一项)。我在 Firebase 创建了索引我尝试了两种索引类型 none 工作。奇怪的是,当我从 phone 添加新的 post 时,当我添加完成时它工作正常但是当在另一个 phone 上列出时它显示描述的行为。
编辑:当我热重载时它工作正常(最后添加的 post 显示在顶部) 编辑:当我删除 orderBy 方法时,问题仍然存在。
StreamBuilder(
stream: FirebaseFirestore.instance
.collection("users")
.doc(FirebaseAuth.instance.currentUser.uid)
.collection("posts")
.orderBy('postedAt', descending:true)
.snapshots(),
builder: (BuildContext context,AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
if (snapshot.hasError) {
print("error:" + snapshot.error.toString());
}
List<Post> posts = [];
posts = snapshot.data.docs.map((postDoc) {
return Post.fromDoc(postDoc);
}).toList();
if (posts.isEmpty) {
return Center(
child: Text("No posts"),
);
}
return ListView.builder(
cacheExtent: 4000,
itemCount: posts.length,
itemBuilder: (BuildContext context, int index) {
return PostWidget(
post: posts[index],
);
},
);
},
)
我的索引:
Composite index single index
文档截图: document ss
我解决了这个问题。
我认为如果它是复制元素,可能无法将它们分开。并将关键参数添加到 PostWidget
所以它起作用了。