Flutter 在函数返回 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();
  },)