【发布时间】:2022-01-13 07:43:06
【问题描述】:
我在我的项目中使用 StreamProviders,目前面临一个问题,即当前设置不允许我等到僵硬加载后才显示某些屏幕。
所以在我的 Home() 中,我定义了我的提供者:
return MultiProvider(
providers: [
StreamProvider<PetUser?>(
create: (context) => DatabaseService(uid: user?.uid).currentUser,
initialData: null,
catchError: (_, __) {},
),
StreamProvider<Pet?>(
create: (context) => DatabaseService(uid: user?.uid).petData,
initialData: null,
catchError: (_, __) {},
),
],
child: Scaffold( ... ));
在我的database.dart 我有:
Stream<PetUser> get currentUser {
return ownersCollection.doc(uid).snapshots().map(_currentUserFromSnapshot);
}
Stream<Pet> get petData {
var map = petsCollection.doc(uid).snapshots().map(_petDataFromSnapshot);
print(map);
return map;
PetUser _currentUserFromSnapshot(DocumentSnapshot snapshot) {
var data = snapshot.data() as Map;
return PetUser(uid!, data['name']);
}
Pet _petDataFromSnapshot(DocumentSnapshot snapshot) {
var data = snapshot.data() as Map;
return Pet(uid!, data['petName'], null, null);
}
所以我想要我进一步筛选Pet 和PetUser 的数据,只有在我知道从数据库加载完成后才知道。
如何更改此类设置才能使其成为可能。
现在我在我的个人资料屏幕中调用:
final user = Provider.of<PetUser?>(context);
如果我打印它的值,它首先是 null,然后在一段时间后填充数据。
我对这个话题非常陌生,所以我也愿意接受关于如何彻底改变我的方法的提示。
【问题讨论】:
-
问题是:要获取相应的宠物数据,我需要用户的 uid,我只能从上下文中获取(因为使用 Provider.of),所以我不能从 init 函数中获取。 ..
标签: flutter dart state flutter-provider