如何解决颤振:未来构建器引起的红屏
我的 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();
}
});
}
}
}
问题在于,在最终显示mypage
或mypagepro
屏幕之前,需要很长时间来检查用户的状态,以至于出现红色屏幕。
我想显示 mypage
或 mypagepro
屏幕而不像这样显示任何红色屏幕。如何在检查用户状态时避免出现此红屏?
解决方法
您应该检查 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 举报,一经查实,本站将立刻删除。