firebase - Flutter:Firebase 身份验证和 Firestore 快照流
问题描述
在我的颤振应用程序中,我使用 firebase 进行身份验证和 firestore 数据库。我也在尝试遵循 BLOC 模式。
成功登录后,我需要使用存储在文档中的一些数据来构建我的 UI 屏幕:
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Auth.of(context).firebase.uid(),
builder: (context, snap){
if(snap.hasData) {
print("Your uid is ${snap.data}");
return StreamBuilder(
stream: Firestore.instance.collection('USERS').document(snap.data).collection('PHOTOS').document(
widget.photoID).snapshots(),
builder: (context, AsyncSnapshot<DocumentSnapshot> snap) {...}
现在,一切正常。
Auth 是 Firebase Auth 扩展 InheritedWidget 的包装类,其中 .uid() 方法返回带有用户标识符的 Future。然后我使用 StreamBuilder 构建 UI,通过 uid 获取 DocumentSnapshot。
所以这是我的问题:是否有更好的方法来实现这一点并避免将 StreamBuilder 嵌套在 FutureBuilder 中?
解决方案
更新:
firebase.uid()
现在是同步而不是异步,因为0.18.0
. 所以你可以直接在你的流中使用它。
老答案:
RxDart是您所需要的,您可以Future
在Stream
将它们传递到StreamBuilder
.
var mergedStream = Auth.of(context).firebase.uid().asStream().flatMap((uid) =>
Firestore.instance
.collection('USERS')
.document(uid)
.collection('PHOTOS')
.document(widget.photoID)
.snapshots());
然后你可以在你的StreamBuilder
推荐阅读
- python-3.x - 如何使用 django-quill-editor 将引导 img-fluid 类添加到图像
- mysql - MySQL递归更新使用触发器
- javascript - 如何在 React Native 中将布尔值从孩子传递给父母?
- python-3.x - 我可以使用单张图像测量相机和物体之间的距离吗?
- javascript - 修改 DOM 后如何使自定义文本编辑器与撤消和重做快捷方式一起使用?
- prompt - obiee12c 限制可用于分析的表格提示数
- python - Kivy:将 ScrollView 移动到某个 y
- python - 幕后的 Numpy 固定大小数据类型
- python - Slack chat_postMessage, files_upload 在同一条消息中
- android - BottomNavigationView 导航组件嵌套图形问题