如何从 FutureBuilder 返回不同的 MaterialApp 小部件

Ati*_*man 6 dart flutter

我需要从 localstorge 获取数据,并根据数据值 isLogin 是 true 或 false 如果 isLogin 值为 true 则返回不同的 MaterialApp,如果为 false 则返回不同的 MaterialApp。

Widget build(BuildContext context) {
    return FutureBuilder(
      future: storage.ready,
      builder: (BuildContext context, snapshots) {
        if (snapshots.hasData) {
          var isLogin = storage.getItem('isLogin');
          if (snapshots.data == true) {
            return MaterialApp(
              initialRoute: '/sample',
              onGenerateRoute: RouteGenerator.generateRoute,
            );
          } else {
            return MaterialApp(
              initialRoute: '/',
              onGenerateRoute: RouteGenerator.generateRoute,
            );
          }
        }
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

Ati*_*man 2

所以这就是我的做法,我不确定这是否是最好的解决方案,但它有效。

 main() async {
  String isToNavigate = await MainAppService().getPrefValue('isToRemember');
  String typeOfUser = await MainAppService().getPrefValue('typeOfUser');
  if (isToNavigate != null) {
    if (typeOfUser == 'admin') {
      WidgetsFlutterBinding.ensureInitialized();

      runApp(AdminMyApp());
    }
    if (typeOfUser == 'client') {
      WidgetsFlutterBinding.ensureInitialized();

      runApp(MyAppClient());
    }
    if (typeOfUser == 'professional') {
      WidgetsFlutterBinding.ensureInitialized();

      runApp(MyProfessionalsApp());
    }
  } else {
    print('null is found /');
    WidgetsFlutterBinding.ensureInitialized();

    runApp(MyApp());
  }
}
Run Code Online (Sandbox Code Playgroud)