Flutter:显示来自经过身份验证的 Firebase Auth 用户的带有 StreamBuilder 的一些 Firestore 集合
Posted
技术标签:
【中文标题】Flutter:显示来自经过身份验证的 Firebase Auth 用户的带有 StreamBuilder 的一些 Firestore 集合【英文标题】:Flutter: Shows some Firestore Collection with a StreamBuilder from an authenticated Firebase Auth User 【发布时间】:2019-08-01 18:24:49 【问题描述】:我的应用有一组卡片,我需要将一些汽车添加到收藏夹列表中,我希望每个用户都有自己的收藏夹。
所以我做了经典的 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();
我怎样才能完成呢?
谢谢
【问题讨论】:
@KENdi 你能确保修复所有标签吗?这个问题是关于 Firestore 而不是实时数据库。 【参考方案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>
并打印您需要的内容 :)
希望对你有帮助!!
【讨论】:
我没有提到document Id
默认不等于FirebaseUser uid
。我假设你强迫 id 等于 uid,如果你不这样做,那显然是行不通的。
谢谢你,Ferdi,我试试看。以上是关于Flutter:显示来自经过身份验证的 Firebase Auth 用户的带有 StreamBuilder 的一些 Firestore 集合的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Firebase - 未能正确删除经过 Google 身份验证的用户
带有 WebView 的 Flutter 应用中的 Firebase 身份验证
来自 laravel 会话登录的经过身份验证的 api 调用。可能吗?