我的应用程序有一系列卡片,我需要在“收藏夹”列表中添加一些汽车,我希望每个用户都有自己的收藏夹。
所以我做了经典的StreamBuilder示例,以在Flutter上显示一些列表:
StreamBuilder<QuerySnapshot>(
stream: getCars()
如果getCars()函数像这样,则一切正常:
getCars() {
return Firestore.instance
.collection("users")
.document("oT646MvXXXXXXXXXXXjlN8L1V2")
.collection("cars").snapshots();
}
让我们说“ oT646MvXXXXXXXXXXXjlN8L1V2”是FirebaseUser uid。
但是我该如何动态地读取FirebaseUser uid以返回集合?
我尝试了这段代码,但是由于返回了Future,因此无法正常工作。
getCarsError()异步{ FirebaseUser fUser =等待FirebaseAuth.instance.currentUser();
return Firestore.instance
.collection("users")
.document(fUser.uid)
.collection("cars").snapshots();
}
我该如何完成?
谢谢
答案 0 :(得分:1)
好的,这个想法是创建一个流(我使用rxDart库,但您可以不使用它)
BehaviorSubject<Car> _carController = BehaviorSubject<Car>();
Function(Car) get pushCar => _carController.sink.add;
Stream<Car> get streamCar => _carController ;
...
StreamBuilder<Car>(
stream: streamCar
然后在您的异步函数中:
void getCars() async{
FirebaseUser fUser = await FirebaseAuth.instance.currentUser();
Firestore.instance
.collection("users")
.document(fUser.uid)
.collection("cars").getDocuments().then((querySnapshot){
for (document in querySnapshot.documents){
pushCar(Car.fromJson(document.data)); //Deserialize your car here
}).catchError((e)=>print(e)); //Do what you want to handle error
}
因此,您将汽车异步推入流中,而您只得到stream<Car>
并打印您需要的内容:)
希望有帮助!