flutter - 如何比较体内数据库中的值并使用三元条件进一步进行
问题描述
我正在从 firestore 数据库中获取值,并显示与用户相关的所有详细信息,但是当我尝试在正文中添加下面提到的条件时,它不起作用。我想要的是如果用户为空,则将用户移动到启动屏幕,如果它不为空,则要检查状态,如果它被“阻止”,那么我希望用户转到阻止屏幕,否则主屏幕带有底部标签。但我不知道为什么它不起作用。这是带有底部选项卡的主屏幕,在此我试图比较这样的值,但我认为正确的值没有出现在这里。
body: currentUser == null ?
Center(child: Splash())
:currentUser.userStatus == 'isBlocked'
? BlockUser():
Center(
child: Container(),
如果像这样放 != 符号,那么它就可以工作。
body: currentUser == null ?
Center(child: Splash())
:currentUser.userStatus != 'isBlocked'
? BlockUser():
Center(
child: Container(),
我以这种方式获取值,它显示了与用户相关的所有数据:-
CreateAccountData currentUser;
void initState() {
super.initState();
_getCurrentUser();
_getMatches();
getUser().then((value) {
currentUser = value;
userStatus = value.userStatus;
});
}
Future<CreateAccountData> getUser() async {
final User user = auth.currentUser;
return docRef.doc(user.uid).get().then((m) => CreateAccountData.fromDocument(m));
}
解决方案
我认为 Builder 应该在这里工作得最好
body: Builder(
builder: (BuildContext context) {
if(currentUser == null){
return Center(child: Splash())
}
if(currentUser.userStatus == 'isBlocked'){
return BlockUser();
}
return Center(child: Container();
},
),
推荐阅读
- javascript - knex.js 查询“承诺”何时执行/解决?
- python - 尽管以下两个函数的时间复杂度似乎相似,但为什么性能却存在巨大差异?
- tcp - 如何确定我是否需要来自 Rust io::Error 的新 TCP 连接?
- php - Stripe/Laravel - 更新条带客户导致 GET 方法错误
- react-native - 为什么我的标题的背景颜色不适用?
- sql-server - 如何将列值显示为行并将数据与其他表连接?
- tensorflow - 关于如何在 TPU 云上运行自定义 keras 代码
- json - JOLT 规范 - 将数组转置为类
- android - 为什么我的 android 主屏幕小部件变慢?
- pipe - 找不到管道“翻译” Ionic 4