#flutter #setstate #showdialog
#flutter #setstate #showdialog
Вопрос:
Я хочу проверить, есть ли номер телефона, который вводит пользователь, в firebase, поэтому я использую ShowDialog для отображения счетчика, я хочу отклонить showdialog, если этот номер телефона уже существует. Я пробовал setState на, но showddialog не будет автоматически отключен.
_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();
}
}
Комментарии:
1. Пожалуйста, проверьте мой ответ
Ответ №1:
Вы можете попробовать с приведенными ниже строками
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();
}
}
Комментарии:
1. Спасибо, но я отправляю эту ошибку ‘package:flutter /src / widgets /navigator.dart’: Ошибка утверждения: строка 4041 поз 12: ‘!_debugLocked’: неверно.
2. @Godwin пожалуйста, перепроверьте мой ответ, я обновил свой ответ
3. @Godwin Если этот ответ сработал для вас, пожалуйста, проголосуйте и отметьте как true для этого ответа Спасибо
Ответ №2:
Чтобы скрыть диалоговое окно, вы можете использовать:
Navigator.pop(context);
Если в вашем приложении есть несколько объектов Navigator, вы можете использовать:
Navigator.of(context, rootNavigator: true).pop();
Вы можете ознакомиться с документами здесь: https://api.flutter.dev/flutter/material/showDialog.html