您永远都不应使用Future<Stream>
,这是双重异步的,这是不必要的。只需返回一个Stream
,然后在准备就绪之前不必发出任何事件。
目前尚不清楚try
/ catch
在保护什么,因为返回non- Future
不会抛出异常。如果返回流,则也要在流上发出任何错误。
您可以将代码重写为:
Stream<QuerySnapshot> getDataStreamSnapshots() async* {
// Get current user.
final User user = await FirebaseAuth().currentUser();
String userId = user.uid;
yield* db
.collection(db)
.where("uid", isEqualTo: userId)
.snapshots();
}
一个async*
功能是异步的,所以你可以使用await
。它返回一个Stream
,您可以使用yield event;
或在流上发出事件yield* streamOfEvents;
。