问题描述
我有一个视图,用户可以在其中创建事件,如果用户创建事件,则通过共享首选项保存一个值,该值确定用户是否为管理员。如果用户现在转到视图,构建小部件应该构建不同的小部件,无论用户是管理员还是访客。我有一个功能可以检查用户是管理员还是访客。但是整个过程还不能正常工作,并且没有构建正确的小部件。 也许我犯了一个愚蠢的错误,或者这不是最好的做法,我会很感激每一点帮助!
这是我的构建方法
@override
Widget build(BuildContext context) {
return checkifadmin() != null ? buildGuestView() : buildAdminView();
}
Future<bool> checkifadmin() async {
final prefs = await SharedPreferences.getInstance();
final myevent = prefs.getString('event');
if (myevent == widget.eventName) {
print('Your are admin');
return true;
} else {
print('you are a guest');
return false;
}
}
BuildGuestView 始终构建,当我将其更改为:
return checkifadmin() != null ? buildAdminView() : buildGuestView();
buildadminview 总是构建。
解决方法
return await checkifadmin() ? buildAdminView() : buildGuestView();
,
你应该使用FutureBuilder
:
FutureBuilder<bool>(
future: checkIfAdmin(),builder: (_,snapshot) {
final hasData = snapshot.data ?? false;
return hasData ? buildAdminView() : buildGuestView();
},)