更改“未来< bool>"转换为静态类型“布尔"用于条件 [英] Changing 'Future<bool>' into static type 'bool' for condition

查看:99
本文介绍了更改“未来< bool>"转换为静态类型“布尔"用于条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题确实非常相似,例如这个问题.我遵循了公认的答案,但没有任何反应.

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

这篇关于更改“未来&lt; bool&gt;"转换为静态类型“布尔"用于条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆