【发布时间】:2021-04-08 09:29:46
【问题描述】:
我有一个 Firebase 云函数,可以在新用户注册时创建一个文档。该函数创建的文档是存储用户数据的位置。流程是这样的:
- 用户注册
- 在 Firestore 中创建的用户文档
- Firebase 函数触发创建“其他”文档
- 用户看到主页
- 主页使用“其他”文档中的数据
我遇到的问题是用户在执行 Firebase 功能之前直接进入主页,并且尚未创建“其他”文档。
这意味着用户只是看到一个 CircularProgressIndicator,因为页面在“其他”文档存在之前加载。
如果用户点击离开该页面并返回该页面,它会正常工作,因为到那时“其他”文档已经存在。同样,当我在初始加载主页时添加 5 秒延迟时,它会起作用,因为 Firebase 函数有时间执行 - 但这不是一个好的解决方案。
我想知道如何确保 Firebase 函数已执行并且在加载主页之前创建了“其他”文档?
初始化状态
void initState() {
super.initState();
final user = Provider.of<UserClass>(
context,
listen: false);
final uid = user.uid;
_houseID = getHouseID(uid);
}
Firebase 函数创建的文档的未来返回 ID
Future<String> getHouseID(uid) async {
String houseID;
await Future.delayed(Duration(milliseconds: 5000)); // with this delay it works fine
await FirebaseFirestore.instance
.collection('users')
.doc(uid)
.collection('userHouses') // this collection is being created by a Cloud Function
.get()
.then(
(value) {
houseID = value.docs.single.id;
},
);
return houseID;
}
FutureBuilder
return FutureBuilder(
future: _houseID,
builder: (BuildContext context, AsyncSnapshot snapshot) {
hhid = snapshot.data;
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator()); // this runs forever when the user first signs up
} else {
return // homepage using hhid to retrieve user data
【问题讨论】:
标签: firebase flutter google-cloud-functions