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 所以它起作用了。