Flutter 在函数 returns true 时构建不同的小部件
Flutter build different widgets when a function returns true
我有一个用户可以在其中创建事件的视图,如果用户创建了事件,则会通过共享首选项保存一个值,以确定用户是否是管理员。如果用户现在转到视图,无论用户是管理员还是来宾,构建小部件都应该构建不同的小部件。我有一个功能可以检查用户是管理员还是来宾。但是整个事情还不能正常工作,并且没有构建正确的小部件。
也许我犯了一个愚蠢的错误,或者这不是最佳做法,我将不胜感激!
这是我的构建方法
@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();
},
)
我有一个用户可以在其中创建事件的视图,如果用户创建了事件,则会通过共享首选项保存一个值,以确定用户是否是管理员。如果用户现在转到视图,无论用户是管理员还是来宾,构建小部件都应该构建不同的小部件。我有一个功能可以检查用户是管理员还是来宾。但是整个事情还不能正常工作,并且没有构建正确的小部件。 也许我犯了一个愚蠢的错误,或者这不是最佳做法,我将不胜感激!
这是我的构建方法
@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();
},
)