【问题标题】:Changing 'Future<bool>' into static type 'bool' for condition将 'Future<bool>' 更改为条件的静态类型 'bool'
【发布时间】:2020-02-13 23:50:49
【问题描述】:

这个问题真的非常像this one。我遵循了接受的答案,但没有任何反应。

我尝试修改main.dart 上的第一个目标网页,无论是HomePage() 还是OnBoardingPage()。我从 Shared Preferences 中获取数据(bool)并先进行检查。

如您所见,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: 行。

我不太明白为什么它仍然给我这样的错误。 我已经用 await 更改了代码,但似乎给我带来了更多麻烦。我也做了一些修改:

home: _initBro().then((val) {
  return (val) ? HomePage() : OnBoardingPage();
}),

但还是没有希望。

我是 Flutter 的新手,Dart 也是如此。任何帮助将不胜感激。

非常感谢大家的关注。

【问题讨论】:

  • 为什么不在 main 中调用 _initBro,然后再在 home 中检查 bool 值
  • 尝试使用Futurebuilder

标签: flutter dart sharedpreferences


【解决方案1】:

您可以使用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() 返回值时 - 此方法将返回所需的小部件

【讨论】:

  • 感谢您的回复,安德烈。实际上,我想到了使用FutureBuilder,但我只是不确定它是否有效,也不知道如何使用它。感谢您的代码示例。让我试试看。
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2019-07-08
  • 2021-10-16
  • 2021-10-10
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多