Flutter 如何设置主页异步和有条件?
我的应用程序有一个登录页面,并使用访问令牌登录用户。在应用程序开始时,如果用户仍然拥有令牌(这意味着自上次登录后未注销),则主页为X,但如果用户没有令牌,则主页为登录页面。没有问题,因为我使用SharedReferences来存储令牌,但我决定使用Flatter_secure_存储包。它的功能是异步工作的。所以问题是,在我将SharedReferences更改为Flatter_secure_storage之后,如果用户没有令牌并启动应用程序,则会显示X页几秒钟,然后出现登录页。我对所有flatter\u secure\u存储变量使用了异步/等待函数,但不能将其用于主页。我认为这是因为我不能让应用程序等待令牌检查,它开始构建页面X,然后意识到令牌为空,然后构建登录页面。这可能不是真的,只是我的想法。我的家庭代码是Flutter 如何设置主页异步和有条件?,flutter,dart,Flutter,Dart,我的应用程序有一个登录页面,并使用访问令牌登录用户。在应用程序开始时,如果用户仍然拥有令牌(这意味着自上次登录后未注销),则主页为X,但如果用户没有令牌,则主页为登录页面。没有问题,因为我使用SharedReferences来存储令牌,但我决定使用Flatter_secure_存储包。它的功能是异步工作的。所以问题是,在我将SharedReferences更改为Flatter_secure_storage之后,如果用户没有令牌并启动应用程序,则会显示X页几秒钟,然后出现登录页。我对所有flatt
home: Constants.storage.read(key: "token") !=
null
? ChangeNotifierProvider(
create: (context) => BooksPageViewModel(),
child: BooksView(),
)
: ChangeNotifierProvider(
create: (context) => LoginPageViewModel(),
child: LoginPage(),
));
我试图创建一个未来函数,但无法将其分配给home:。。。
我试着回家:。。。异步但没有发生。
如何将主页设置为等待令牌检查?提前感谢。因此,如果我理解正确,.storage.read函数是异步的,必须等待才能使令牌不为空。 在这种情况下,我要么使用Futurebuilder,要么事先执行Constants.storage.read函数,如下所示:
var token = await Constants.storage.read(key: "token");
如果您遇到必须使主方法异步的问题,那么只需调用WidgetsFlutterBinding.ensureInitialized()代码>在main的开头,它将工作。我将main转到
Future main() async {
正如@MaxTromp所说,我添加了WidgetsFlutterBinding.ensureInitialized()代码>
然后我为我的令牌向常量添加了一个静态字符串
,并调用Constants.token=wait Constants.storage.read(key:“token”)代码>内部主。
那么我的家是什么
home: Constants.token !=
null
? ChangeNotifierProvider(
create: (context) => BooksPageViewModel(),
child: BooksView(),
)
: ChangeNotifierProvider(
create: (context) => LoginPageViewModel(),
child: LoginPage(),
));
现在,它可以完美地工作。您可以使用FutureBuilder
显示启动屏幕(或加载指示器),直到您的未来返回一个值,然后使用该值决定显示哪个页面。