【发布时间】:2021-05-02 01:27:53
【问题描述】:
我正在尝试使用 Flutter 和 Firebase 创建诸如提要之类的内容,并且我想通过它们的 'postedAt' 值对帖子进行排序,但问题是当我使用 collection.orderBy() 时它无法正常工作。它将新帖子添加到提要的随机位置,并为其提供随机现有帖子的 imageURL(或者我认为它只是复制提要中的一个项目)。我在 Firebase 创建了索引我尝试了两种索引类型都不起作用。奇怪的是,当我在添加完成后从手机添加新帖子时,它工作正常,但在另一部手机上列出时,它会显示所描述的行为。
编辑:当我热重载时它工作正常(最后添加的帖子显示在顶部) 编辑:当我删除 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],
);
},
);
},
)
我的索引:
文件截图: document ss
【问题讨论】:
-
postedAt- 是timeStamp字段吗? -
您能分享一个示例文档的屏幕截图吗?
-
@Muthu Thavamani 不,它不是时间戳,它是整数 DateTime.now().milisecondssinceepoch
-
我用文档截图编辑了
标签: firebase flutter google-cloud-firestore feed stream-builder