Flutter Firestore 流在使用 order by 子句时不会更新



我使用以下方法从 firestore 返回流:

Stream<CompletedExerciseList> getExerciseStream(String uid, {int limit}) {
Stream<QuerySnapshot> snapshots;
try {
CollectionReference exerciseCollection = Firestore.instance.collection('users').document(uid).collection('completed_exercise');
if (limit != null) {
snapshots = exerciseCollection.orderBy('startTime', descending: false).orderBy('name', descending: true).limit(limit).snapshots();
} else {
snapshots = exerciseCollection.orderBy('startTime', descending: false).orderBy('name', descending: true).snapshots();
}
} catch (e) {
print(e);
}
return snapshots.map((list) => CompletedExerciseList(list.documents.map((doc) => ExerciseModel.fromMap(doc.data)).toList()));
}

上面的方法在小部件构建时返回一个流,但是当集合中的文档更新时,流不会更新。但是,如果我删除 orderBy 子句,则在从集合中添加/删除文档时,流会正确更新。所以下面的代码有效,但是我需要能够排序和限制快照的结果。

Stream<CompletedExerciseList> getExerciseStream(String uid, {int limit}) {
Stream<QuerySnapshot> snapshots;
try {
CollectionReference exerciseCollection = Firestore.instance.collection('users').document(uid).collection('completed_exercise');
if (limit != null) {
snapshots = exerciseCollection.limit(limit).snapshots();
} else {
snapshots = exerciseCollection.snapshots();
}
} catch (e) {
print(e);
}
return snapshots.map((list) => CompletedExerciseList(list.documents.map((doc) => ExerciseModel.fromMap(doc.data)).toList()));
}

对于这两种情况,我的控制台都不会打印任何错误。我正在使用带有 Flutter SDK 的 Android Studio。

您应该能够在流构建器上检查快照错误。至于对Firestore数据进行排序,您需要设置一个索引。

最新更新