我是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'的实例。
您应该等待它完成。
// 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();
}