我的 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
屏幕而不像这样显示任何红色屏幕。如何在检查用户状态时避免出现此红屏?
答案 0 :(得分:2)
您应该检查 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();
}
});
}
}
}
答案 1 :(得分:1)
您正在尝试访问尚未收到的数据的属性。尝试使用以下代码。
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"
答案 2 :(得分:0)
需要验证使用
snapshot.hasData ? myPagePro() : MyPage()
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: FirebaseFirestore.instance
.collection('crews')
.doc(user.uid)
.get(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) =>
snapshot.hasData ? myPagePro() : MyPage()
);
}
}
}