Flutter Future 我想返回布尔值

问题描述 投票:0回答:1

我是Flutter的新手,我正试图从StatelessWidget类中获取它,但不允许我从Future方法中获取返回值,如何获得返回值?

class HomePage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
  Widget _defaultPage = userLogin();
  var loginStatus = isLoggedIn();
  print(loginStatus);
    if(loginStatus == true){
      _defaultPage = NoteList();
    }
  return MaterialApp(
        theme: ThemeData(
          primarySwatch: Colors.purple,
        ),
        debugShowCheckedModeBanner: false,
        title: "User notes",
        home: _defaultPage,
        routes: <String, WidgetBuilder> {
          '/login': (BuildContext context) => new userLogin(),
          '/note_list' : (BuildContext context) => new NoteList(),
          '/note_detail' : (BuildContext context) => new NoteDetail(),
        },
      );
  }
}

未来方法:

Future<bool> isLoggedIn() async{
  SharedPreferences sharedPreferences;
  sharedPreferences = await SharedPreferences.getInstance();
  String userId = sharedPreferences.getString("userId");
  bool isLogin = sharedPreferences.getBool("userLoggedIn");
  return isLogin;
}

但是一直在日志中说'Future'的实例。

flutter flutter-layout
1个回答
1
投票

您应该等待它完成。

// in async function
var loginStatus = await isLoggedIn();

var loginStatus;

isLoggedIn().then((onValue){
   loginStatus = onValue;
})

在您的情况下,您应该使用将来的构建器

home: FutureBuilder<bool>(
        future: isLoggedIn(),
        builder: (context, snapshot){
        if(snapshot.hasData){
          return snapshot.data ? NoteList() : userLogin();
        }
        return CircularProgressIndicator();
      })

编辑:

Future<bool> isLoggedIn() async {
  final sharedPreferences = await SharedPreferences.getInstance();
  final isContains = sharedPreferences.containsKey("userLoggedIn");

  return isContains
      ? sharedPreferences.getBool("userLoggedIn")
      : throw NullThrownError();
}
© www.soinside.com 2019 - 2024. All rights reserved.