这个问题确实非常相似,类似于this one。我遵循了公认的答案,但没有任何反应。
我尝试修改main.dart
或HomePage()
上的第一个OnBoardingPage()
登陆页面。我正在从“共享首选项”中获取数据(布尔),然后首先进行检查。
如您所见,OnBoardingPage()
只是一个一次性事件的屏幕。
代码在这里:
class MyApp extends StatelessWidget {
SharedPrefs prefs = SharedPrefs();
Future<bool> _initBro() async {
var redirect = await prefs.read("onboard") ?? false;
print("main => $redirect");
return redirect;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
fontFamily: 'CM Sans Serif',
platform: TargetPlatform.android,
),
home: (_initBro().then(val => val == true)) ? HomePage() : OnBoardingPage(),
// home: HomePage(),
debugShowCheckedModeBanner: false,
);
}
}
问题出在home:
行。
我不太明白为什么它仍然给我这样的错误。 我已经等待更改了代码,但似乎给我带来了更多麻烦。我也对它做了如下修改:
home: _initBro().then((val) {
return (val) ? HomePage() : OnBoardingPage();
}),
但是仍然没有希望。
我是Flutter的新手,也绝对是Dart的新手。任何帮助将不胜感激。
非常感谢您的关注。
答案 0 :(得分:2)
您可以使用FutureBuilder
class MyApp extends StatelessWidget {
SharedPrefs prefs = SharedPrefs();
Future<bool> _initBro() async {
var redirect = await prefs.read("onboard") ?? false;
print("main => $redirect");
return redirect;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
fontFamily: 'CM Sans Serif',
platform: TargetPlatform.android,
),
home: FutureBuilder(builder: (context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData)
return snapshot.data ? HomePage() : OnBoardingPage();
else
return Container();
},
future: _initBro(),);
}
debugShowCheckedModeBanner: false,
);
}
}
它同步返回小部件。如果尚无数据-它返回空的Container
,并且当_initBro()
返回值时-此方法将返回所需的小部件