gpt4 book ai didi

flutter - 如何有条件地更新 Cloud Firestore 中的数据?

转载 作者:IT王子 更新时间:2023-10-29 06:57:18 24 4
gpt4 key购买 nike

我的应用程序中有一个设置页面,用户可以编辑该页面以更新详细信息。数据屏幕由两个文本字段和一个个人资料头像组成。该应用程序将谷歌(和电子邮件和密码)作为身份验证提供者。因此,当用户第一次注册时,我有一种方法可以将数据呈现给用户。

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。我该如何防止这种情况?

最佳答案

如果您告诉 Firestore 将字段设置为空字符串,它会将该字段设置为空字符串。如果您不希望 Firestore 修改某个字段,则不应在调用 updateDate(...) 时指定该字段。

在实践中,这意味着您需要有条件地填充值的 Map,如下所示:

Map<String, dynamic> values = new Map<String,dynamic>();
if (name?.isEmpty ?? true) values["name"] = name;
if (email?.isEmpty ?? true) values["email"] = email;
if (avatarUrl?.isEmpty ?? true) values["avatarUrl"] = avatarUrl;

AuthProvider.of(context).userData.docRef.updateData(values).then((data) async{
...

空字符串检查逻辑参见Dart null / false / empty checking: How to write this shorter?

关于flutter - 如何有条件地更新 Cloud Firestore 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com