更改“未来< bool>"转换为静态类型“布尔"用于条件 [英] Changing 'Future<bool>' into static type 'bool' for condition
问题描述
这个问题确实非常相似,例如这个问题一个>.我遵循了公认的答案,但没有任何反应.
This question really, really similar like this one. I have followed the accepted answer but nothing happen.
无论是HomePage()
还是OnBoardingPage()
,我都尝试修改我在main.dart
上的第一个登录页面.我正在从共享首选项"中获取数据(布尔),然后首先进行检查.
I try to modify my first landing page on main.dart
whether it's HomePage()
or OnBoardingPage()
. I'm getting data (bool) from Shared Preferences and do the checking first.
如您所见,OnBoardingPage()
只是一次性事件屏幕.
As you can see, the OnBoardingPage()
is just a one-time-event screen.
代码在这里:
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:
行上.
我不太明白为什么它仍然给我这样的错误. 我已经等待更改了代码,但似乎给我带来了更多麻烦.我也对它做了如下修改:
I don't quite understand why it still giving me such error. I have changed the code with await but, seems its giving me much more trouble. Also I have modified it a bit like this:
home: _initBro().then((val) {
return (val) ? HomePage() : OnBoardingPage();
}),
但是仍然没有希望.
我是Flutter的新手,也绝对是Dart的新手.任何帮助将不胜感激.
I'm new with Flutter and absolutely also with Dart. Any help would be really appreciated.
非常感谢你们的关注.
推荐答案
您可以使用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()
返回值时-此方法将返回所需的小部件
It returns widget synchronously. If there is no data yet - it returns empty Container
, and when _initBro()
returns value - this method will return needed widget
这篇关于更改“未来< bool>"转换为静态类型“布尔"用于条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!