如何解决无法使用 Provider 和获取数据:尝试调用 Provider.of<dynamic>
我无法通过 Provider 从 firestore/firebase 检索布尔值。
getter 位于问题出处的下方:
_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'];
});
}]
使用来自 Provider 的数据在 Future 构建器下方。
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,};
}
}
解决方法
await Provider.of(context,listen: false) //<--- here is your problem,you don't define the type of Provider
.collection('Users')
.document(uid)
.get().then((result) {
user.isAdmin = result.data['isAdmin'];
});
改成这样
await Provider.of<FirebaseFirestore>(context,listen: false)...the rest of your code...
,
我相信您需要使用 T 的用户,而不仅仅是用户:
return User<T>( // <--- Here
favorites: data['favorite'] ?? [],documentID: document.documentID,displayName: data['displayName'] ?? '',email: data['email'] ?? '',isAdmin: data['isAdmin'] ?? false,);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。