【发布时间】:2021-01-07 23:13:02
【问题描述】:
我无法通过 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'];
});
}]
使用来自提供者的数据的未来构建器。
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,
};
}
}
【问题讨论】:
-
查看数据结构会很有帮助,因为您可能没有检索到所需的布尔值。
-
嗨 Andrew,我为用户添加了结构。
标签: firebase flutter google-cloud-firestore provider