【发布时间】:2021-01-03 09:24:26
【问题描述】:
每个用户都有一个分配给他们的管理员角色。显示或隐藏小部件需要此管理员角色。
我收到一条错误消息,提示管理员在 null 上被调用。
尽管获取了其他小部件的用户数据,但我没有从 firebase 正确接收到管理员角色的调用者。
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(),]
【问题讨论】:
-
在 _getProfileData 中然后使用 setState 函数并将 isAdmin 设置为 true
-
谢谢 Benzo,你会把 setState 放在哪里?
-
我假设您正在使用 Statefull 小部件?您可以设置新的变量数据,它将保存来自 API 调用的数据。在有状态的小部件中,您有方法 initState()。在这个函数中,你将调用你的函数 _getProfileData 来填充数据变量。这样您就可以避免使用空变量,因为在构建它时会立即填充 vars。
标签: firebase flutter firebase-authentication admin