微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

颤振:未来构建器引起的红屏

如何解决颤振:未来构建器引起的红屏

我的 Flutter-firebase 应用从检查用户的状态开始。如果用户是专业人士,则会显示 mypagepro 屏幕,否则会显示 mypage。这是我的代码

@override
Widget build(BuildContext context) {
  return FutureBuilder(
      future: FirebaseFirestore.instance
          .collection('crews')
          .doc(user.uid)
          .get(),builder: (BuildContext context,AsyncSnapshot<dynamic> snapshot) {
        if (snapshot.data['isPro'] == true) {
          return MyPagePro();
        } else {
          return MyPage();
        }
      });
    }
  }
}

问题在于,在最终显示mypagemypagepro 屏幕之前,需要很长时间来检查用户的状态,以至于出现红色屏幕。

enter image description here

我想显示 mypagemypagepro 屏幕而不像这样显示任何红色屏幕。如何在检查用户状态时避免出现此红屏?

解决方法

您应该检查 snapshot 是否有数据。

试试这个:

@override
Widget build(BuildContext context) {
  return FutureBuilder(
      future: FirebaseFirestore.instance
          .collection('crews')
          .doc(user.uid)
          .get(),builder: (BuildContext context,AsyncSnapshot<dynamic> snapshot) {
        if (snapshot.hasData && snapshot.data['isPro'] == true) {
          return MyPagePro();
        } else {
          return MyPage();
        }
      });
    }
  }
}
,

您正在尝试访问尚未收到的数据的属性。尝试使用以下代码。

SELECT activities.id,max(symbols.bought_at) AS bought_at 
FROM "activities" 
  JOIN holdings ON trackable_id = holdings.id AND trackable_type = 'Holding'   
  JOIN symbols on symbols.holding_id = holdings.id 
GROUP BY activities.id"
,

需要验证使用

snapshot.hasData ? myPagePro() : MyPage()

   @override
    Widget build(BuildContext context) {
      return FutureBuilder(
          future: FirebaseFirestore.instance
              .collection('crews')
              .doc(user.uid)
              .get(),AsyncSnapshot<dynamic> snapshot) =>
            snapshot.hasData ?  myPagePro() : MyPage()
          );
        }
      }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。