В моем приложении есть страница настроек, которую пользователь может редактировать, чтобы обновить детали.Экран данных состоит из двух двух текстовых полей и аватара профиля.Приложение имеет Google (и адрес электронной почты и пароль) в качестве провайдеров аутентификации.Поэтому, когда пользователь регистрируется впервые, у меня есть метод, который представляет данные пользователю.
void readLocal() async {
controllerName = new TextEditingController(text: AuthProvider.of(context).userData.name);
print(controllerName);
controllerEmail = new TextEditingController(text: AuthProvider.of(context).userData.email);
avatarUrl= AuthProvider.of(context).userData.avatarUrl;
// controllerPhoneNumber= new TextEditingController(text: AuthProvider.of(context).userData.phoneNumber);
// Force refresh input
setState(() {});
}
Данные представлены в соответствии с ожиданиями.Метод вызывается в
@override
void didChangeDependencies() {
readLocal();
}
Чтобы убедиться, что initState завершен.У меня есть кнопка обновления, которая работает не так, как хотелось бы.Когда я редактирую оба поля: оба поля обновляются, и правильные записи отправляются в Firestore.Однако, если я обновляю один TextField
и нажимаю обновление, я теряю данные в другом TextField
(пустая строка записывается в Firestore) и наоборот.И если я нажимаю обновление, не редактируя ни одно из полей, оба поля в Firestore заканчиваются пустыми строками.Вот моя функция обновления
void handleUpdateData() {
focusName.unfocus();
focusEmail.unfocus();
setState(() {
isLoading = true;
});
AuthProvider.of(context).userData.docRef.updateData({'name': name, 'email': email,'avatarUrl':avatarUrl}).then((data) async{
print('@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@');
setState(() {
isLoading = false;
});
Fluttertoast.showToast(msg: "Update success");
}).catchError((err) {
setState(() {
isLoading = false;
});
Fluttertoast.showToast(msg: err.toString());
});
}
, это gist файла дротика.Я предполагаю, что не редактируя поля и затем нажимая кнопку обновления, функция обновления берет пустую строку для обновления и записывает ее в Firestore.Как мне предотвратить это?