我有一种方法可以检查是否设置了当前用户位置,如果没有,则打开一个带有两个按钮的警报对话框:取消和更新配置文件。更新配置文件按钮的 onPressed 导航到第二个屏幕,其中包含更新用户位置的表单。问题是:如果用户单击“更新”按钮并更新位置,则在单击“返回”按钮时,会显示第一页,但警报对话框仍处于打开状态。期望:在关闭返回按钮和更新位置时,返回按钮打开第一个屏幕并刷新整个页面,获得新的位置设置。参见代码:FIRST SCREEN (HOME SCREEN) @override void initState() { super.initState(); 获取用户详细信息();}
updateProfileLocationPrompt(BuildContext context) {
Widget cancelButton = FlatButton(
child: Text("Cancel",
),
onPressed: () {
Navigator.of(context).pop(true);
},
);
Widget updateProfileButton = FlatButton(
child: Text("Update",
),
onPressed: () {
Navigator.of(context)
.push(new MaterialPageRoute(builder: (context) => SettingsScreen()));
},
);
AlertDialog alert = AlertDialog(
title: Text("Update location",
),
content: Text(
"Please Update you location",
),
actions: [
cancelButton,
updateProfileButton,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return alert;
},
);
}
getUserDetails() async {
var firebaseUser = FirebaseAuth.instance.currentUser;
DocumentSnapshot value = await FirebaseFirestore.instance
.collection(Str.USERS)
.doc(firebaseUser.uid)
.get();
if (value.data()[Str.ADDRESS].toString() == null ||
value.data()[Str.ADDRESS].toString() == "") {
return updateProfileAndLocationPrompt(context);
} else {
setState(() {
searchLocationAddress = value.data()[Str.ADDRESS].toString();//got from firebase
getItems();
});
}
return;
}
第二个屏幕 - 设置屏幕 带有文本字段的普通页面,用于将位置更新到 Firebase。真正的问题:我如何导航回主屏幕,用新数据刷新主屏幕并重新加载页面,因此不会打开对话框,因为一旦设置了位置检查,就不应打开对话框。目前,即使我从对话框导航到第二个屏幕,警报对话框仍然打开,主屏幕不会用新数据刷新。