我想判断要从哪个页面开始(实际上是登录页面和主页)。因此,我必须在首选项中阅读isLogin。主要如何做?
我绑了这些代码:
Future<Null> checkIsLogin() async { String _token = ""; // If token exist already, then HomePage SharedPreferences prefs = await SharedPreferences.getInstance(); _token = prefs.getString("token"); print('get token from prefs: ' + _token); if (_token != "" && _token != null) { // already login print("alreay login."); isLogin = true; } } void main() { App.init(); // if we have token then go to HomePage directly otherwise go to LoginPage. Widget _defaultHome = new LoginPage(); checkIsLogin(); if (isLogin) { _defaultHome = new HomePage(); } runApp(new MaterialApp( debugShowCheckedModeBanner: false, theme: globalThemeData, home: _defaultHome )); }
上面的代码中,isLogin是一个全局变量。有一个错误:
Performing full restart... Restarted app in 2,810ms. [VERBOSE-2:dart_error.cc(16)] Unhandled exception: Invalid argument(s) #0 _StringBase.+ (dart:core/runtime/libstring_patch.dart:245:57) #1 checkIsLogin (file:///Volumes/xs/awesome/uranus/clients/flutter/flutter_asgard/lib/main.dart:17:34) <asynchronous suspension> #2 main (file:///Volumes/xs/awesome/uranus/clients/flutter/flutter_asgard/lib/main.dart:29:3) #3 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:279:19) #4 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)
似乎在main中调用异步存在问题,如何使其工作?
加载主页,如果用户未登录,则将其替换为LoginPage()
@override void initState() { super.initState(); checkIsLogin(); } Future<Null> checkIsLogin() async { String _token = ""; SharedPreferences prefs = await SharedPreferences.getInstance(); _token = prefs.getString("token"); if (_token != "" && _token != null) { print("alreay login."); //your home page is loaded } else { //replace it with the login page Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => new LoginPage()), ); } }