如何使用 Flutter 异步无法实现的方法从共享首选项中获取首选项?

How can I get preferences from shared preferences in a method that can't by async in Flutter?

我想获取共享 pref 的 bool 来决定应该加载哪个 Widget,但是该方法不能异步或 bool 无法获取值,因为它不允许“等待”该值。我已经尝试修复它,但大部分都失败了,因为“home”无法接收未来的小部件...,还有其他方法可以做到这一点吗?

void main() => runApp(MyApp());
setloginbool() async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool("savelogin", true);
}

Future<bool> getloginbool() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  bool savelogin = prefs.getBool("savelogin") ?? false;
  return savelogin;
}



class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'KHS Plan',
      theme: (ThemeData(
        textTheme: const TextTheme(
          bodyText1: TextStyle(fontSize: 14)
        )
      )),
      home: checkifpassword(),
    );
  }

}
Widget checkifpassword() {
    bool s = await getloginbool();
    if(s){
      return const Login();
    } else {
      return const MyHomePage();
    }
  }


//This does not work as well
checkifpassword() async {
  bool s = await getloginbool();
    if(s){
      return const Login();
    } else {
      return const MyHomePage();
    }
}

您可以在 Home

上使用 FutureBuilder
 Future<bool> checkifpassword() async {
//perfrom your async operation and return bool
    return await Future.delayed(Duration(seconds: 2), () {
      return true;

    });
  }

home

 home: FutureBuilder<bool>(
          future: checkifpassword(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              if (snapshot.data!) {// for true
                return Login();;
              } else return MyHomePage();
            }
            /// check others state

            return Scaffold(
              body: Center(
                child: CircularProgressIndicator(),
              ),
            );
          },
        )