我如何比较体内数据库中的值,并使用三元条件进一步进行



我正在从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();
},
),

https://api.flutter.dev/flutter/widgets/Builder-class.html

使用Future构建器等待未来作为完成

body: FutureBuilder(
future: getUser(),
builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.done){
if(currentUser == null){
return Splash();
}else if(currentUser.userStatus == 'isBlocked'){
return BlockUser();
}else{
return Container();
}
}else{
return _loadingWidget();
}
},
);

并将您的getUser()更新为

Future<CreateAccountData> getUser() async {
final User user = auth.currentUser;
currentUser  = CreateAccountData.fromDocument(await docRef.doc(user.uid).get());
}

此外,从initState方法中删除getUser调用

void initState() {
super.initState();
_getCurrentUser();
_getMatches();
}

问题:您的代码的问题是,您的构建方法没有等待将来完成,并且您面临检查用户状态和代码始终导航到splash的问题。

最新更新