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();
  },
)