首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查约束并相应地返回正文

检查约束并相应地返回正文
EN

Stack Overflow用户
提问于 2020-04-16 20:40:09
回答 1查看 35关注 0票数 0

我只想在用户第一次打开应用程序时显示入职屏幕,所以在入职屏幕的最后一页,我将OnBoardingStatus value设置为"Done“并移动到主屏幕。但是,当用户下一次打开应用程序时,此代码会使入职屏幕闪烁几毫秒,然后打开mainScreen。

以下是我的代码

代码语言:javascript
复制
class App2 extends StatefulWidget {
  App2({Key key}) : super(key: key);
  @override
  _App2State createState() => _App2State();
}

class _App2State extends State<App2> {
  String onBoardingStatus;

  @override
  void initState() {
    // TODO: implement initState
    getOnBoardingStatus();
    super.initState();


  }

  Future<void> getOnBoardingStatus() async {
    WidgetsFlutterBinding.ensureInitialized();
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var onboardingstatus = prefs.getString('OnBoardingStatus');
    setState(() {
      onBoardingStatus = onboardingstatus;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: onBoardingStatus != null
          ? MainScreen()
          : OnboardingScreen());
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-16 21:31:34

目前,您无法知道onBoardingStatus是否为null,因为尚未检索到SharedPreferences实例,或者因为OnBoardingStatus确实为空。您可以使用FutureBuilder解决此问题

代码语言:javascript
复制
class App2 extends StatelessWidget {
  App2({Key key}) : super(key: key);

  Future<String> getOnBoardingStatus() async => 
    (await SharedPreferences.getInstance()).getString('OnBoardingStatus');

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: getOnBoardingStatus(),
      builder: (context, snapshot) {
        if (snapshot.connectionState != ConnectionState.done) {
          //TODO: Return a widget that indicates loading
        }
        return Scaffold(
            body: snapshot.data != null
                ? MainScreen()
                : OnboardingScreen());
      },  
    );  
  }
}

然而,我不认为这是最好的解决方案。对于初学者来说,App2应该从外部获取状态-这样,如果你决定改变你的存储解决方案,你就不需要接触App2了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61250468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档