问题描述
我想验证用户输入的电话号码是否在 firebase 中,因此我使用 showDialog 显示微调器,如果该电话号码已存在,我想关闭 showdialog。我已经尝试过 setState,但显示的对话框不会自动关闭有效
_phoneExist(phone) {
if (loading) {
showDialog(
context: context,builder: (c) {
return Center(
child: SpinKitChasingDots(
color: Colors.brown,size: 50.0,),);
});
}
firestoreInstance
.collection("partners")
.where("phone",isEqualTo: phone)
.getDocuments()
.then((value) {
value.documents.forEach((result) {
if (result.exists) {
print(result['phone']);
setState(() {
_userExist = true;
loading = false;
});
} else {
print('ghhgghgh');
}
});
});
if (_userExist) {
Scaffold.of(context).showSnackBar(snackBar2('$phone Aleady Exists'));
setState(() {
_userExist = false;
});
} else {
print('gghhgghgchgc');
print(phone);
// _registerUser();
}
}
解决方法
您可以尝试使用以下几行
BuildContext buildContext;
_phoneExist(phone) {
if (loading) {
showDialog(
context: context,builder: (BuildContext context) {
buildContext = context; // Assign your context to buildcontext
return Center(
child: SpinKitChasingDots(color: Colors.brown,size: 50.0,),);
});
}
firestoreInstance
.collection("partners").where("phone",isEqualTo: phone).getDocuments()
.then((value) {
value.documents.forEach((result) {
if (result.exists) {
setState(() {
_userExist = true;
loading = false;
SchedulerBinding.instance.addPostFrameCallback((_) {
Navigator.pop(buildContext);
}); // By adding this you can close your pop up
});
} else {
}
});
});
if (_userExist) {
Scaffold.of(context).showSnackBar(snackBar2('$phone Aleady Exists'));
setState(() {
_userExist = false;
});
} else {
// _registerUser();
}
}
,
要隐藏对话框,您可以使用:
Navigator.pop(context);
如果您的应用有多个 Navigator 对象,您可以使用:
Navigator.of(context,rootNavigator: true).pop();
您可以在此处查看文档:{{3}}