firebase - 无法使用提供者和获取数据:尝试调用 Provider.of
问题描述
我无法通过 Provider 从 firestore/firebase 检索布尔值。
吸气剂低于问题的来源:
_getProfileData(AuthNotifier authNotifier) async {
final uid = await Provider.of<AuthNotifier>(context, listen: false).getCurrentUID();
await Provider.of(context, listen: false)
.collection('Users')
.document(uid)
.get().then((result) {
user.isAdmin = result.data['isAdmin'];
});
}]
在 Future builder 下方,使用来自 Provider 的数据。
future: _getProfileData(authNotifier),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
_isAdmin = snapshot.data['isAdmin'] ?? false;
}
return Container(
child: Column(
children: <Widget>[
adminFeature(),
]
下面,我有身份验证通知程序来从 firebase 检索数据。
Future<String> getCurrentUID() async {
return (await _firebaseAuth.currentUser()).uid;
}
// GET CURRENT USER
Future getCurrentUser() async {
return await _firebaseAuth.currentUser();
}
class User {
List favorites = [];
String documentID;
String displayName;
String email;
String password;
bool isAdmin;
User({
this.favorites,
this.documentID,
this.displayName,
this.email,
this.password,
this.isAdmin,
});
factory User.fromFirestore(DocumentSnapshot document) {
Map data = document.data;
return User(
favorites: data['favorite'] ?? [],
documentID: document.documentID,
displayName: data['displayName'] ?? '',
email: data['email'] ?? '',
isAdmin: data['isAdmin'] ?? false,
);
}
// get admin => null;
Map<String, dynamic> toMap() {
return {
'displayName': displayName,
'email': email,
'isAdmin': isAdmin,
};
}
}
解决方案
我相信您需要使用 T 的用户,而不仅仅是用户:
return User<T>( // <--- Here
favorites: data['favorite'] ?? [],
documentID: document.documentID,
displayName: data['displayName'] ?? '',
email: data['email'] ?? '',
isAdmin: data['isAdmin'] ?? false,
);
推荐阅读
- c++ - 访问头文件中定义的命名空间中的元素
- algorithm - 根据密度函数将平面划分为质量相等的区域
- c# - 使用外部加速度计的 C# 振动传感器
- ruby-on-rails - 将 Rails 5.1 升级到 5.2,找不到 gem 版本,但似乎满足了所有要求
- c++ - Visual Studio 2017 命令行构建速度比 IDE 慢
- python - 从文件中的列获取数据
- node.js - 在各种事件下自动打开串口并记录数据
- javascript - 在 reactjs 前端使用 fetch 从 express 服务器获取 mongodb 数据
- android - Android Studio - 即使在“修复”问题后自动导入也不起作用
- c# - 试图将我的流保存在我的视图模型中