每个用户都有一个分配给他们的管理员角色。需要此管理员角色才能显示或隐藏小部件。
我收到一条错误消息,提示 admin 在 null 上被调用。
尽管获取了其他小部件的用户数据,但我没有从 firebase 正确接收到 Admin 角色的调用者。
FirebaseUser currentUser;
bool isAdmin= false;
Widget adminFeature() {
if(isAdmin == true) {
return Text("You are an admin");
} else {
return Container();
}
}
_getProfileData(User user,AuthNotifier authNotifier) async {
final uid = await Provider.of(context).auth.getCurrentUID();
await Provider.of(context)
.db
.collection('userData')
.document(uid)
.get().then((result) {
user.isAdmin = result.data['isAdmin'];
});
}
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,
floatingActionButton:
FutureBuilder(
future: _getProfileData(user, authNotifier),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
isAdmin = user.isAdmin ?? false;
}
return Container(
child: Column(
children: <Widget>[
FloatingActionButton(
backgroundColor:CompanyColors.blue[500],
child: const Icon(Icons.add),onPressed: () {
var foodNotifier = Provider.of<FoodNotifier>(context, listen: false);
foodNotifier.currentFood = null;
Navigator.of(context).push(
MaterialPageRoute(builder: (BuildContext context) {
return FoodForm(
isUpdating: false,
);
}),
);
},
),
adminFeature(),]
答案 0 :(得分:0)
试试:
_getProfileData(User user,AuthNotifier authNotifier) async {
final uid = await Provider.of(context).auth.getCurrentUID();
return await Provider.of(context)
.db
.collection('userData')
.document(uid)
.get();
}
然后在 FutureBuilder
中:
future: _getProfileData(user, authNotifier),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
isAdmin = snapshot.data['isAdmin'] ?? false;
}
返回方法的结果并将 result.data['isAdmin']
赋值给 isAdmin
变量。