Flutter:显示来自经过身份验证的Firebase Auth用户的StreamBuilder的一些Firestore集合

时间:2019-03-11 12:27:35

标签: firebase flutter google-cloud-firestore

我的应用程序有一系列卡片,我需要在“收藏夹”列表中添加一些汽车,我希望每个用户都有自己的收藏夹。

所以我做了经典的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();

}

我该如何完成?

谢谢

1 个答案:

答案 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>并打印您需要的内容:)

希望有帮助!