等到firestore中的数据成功更新
Posted
技术标签:
【中文标题】等到firestore中的数据成功更新【英文标题】:Wait till data in firestore has successfully updated 【发布时间】:2021-11-09 13:26:14 【问题描述】:我想在用户单击保存按钮时检查数据是否成功上传到 Firestore 如果文档没有更新,则显示 toast 或要求用户重试。
这是我更新文档的代码。
Future updateTechnical(Technical technical) async
return await technicalsCollection.doc(technical.id).update(
"name": technical.name,
"address": technical.address,
"phoneNum": technical.phoneNum,
"tools": technical.tools,
);
这是保存按钮
ElevatedButton(
onPressed: ()
DatabaseService().updateTechnical(
Technical(
id: selectedTechnical.id,
name: nameController.text,
address: addressController.text,
phoneNum: phoneController.text,
tools: selected.join(','),
),
);
,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Save '),
Icon(Icons.person_add),
],
),
),
【问题讨论】:
我想你正在寻找,当 firebase 更新时,对吧?在使用来自 firebase 的新数据调用updateTechnical()
之后,您可能想要做点什么?!
是的,你是对的,当 firebase 更新后,我认为这是可行的。但是如果我想知道文档没有更新的原因(如网络连接、无效数据类型、....等)怎么办?
如果目前的答案令人满意,请务必标记最有帮助的答案,以便其他人看到接受的答案。
【参考方案1】:
要检查您的数据是否成功更新,您需要在发生错误时捕获它们。我已经修改了你的 updateTechnical()
函数来这样做:
Future updateTechnical(Technical technical) async
return await technicalsCollection.doc(technical.id).update(
"name": technical.name,
"address": technical.address,
"phoneNum": technical.phoneNum,
"tools": technical.tools,
).then((value) => print("Updated successfully")) // success toast here
.catchError((error) => print("Failed to update: $error")); // fail toast here
您也可以使用 try/catch 块,但这被认为效率较低,通常会尽可能避免
【讨论】:
【参考方案2】:要等到数据成功更新,您可以使用.then()
。
onPressed: ()
DatabaseService().updateTechnical().then((value) =>
print("successfully uploaded!"),
);
,
要在上传过程中检查是否发生任何错误,您应该检查updateTechnical()
:
Future updateTechnical(Technical technical) async
try
final querySnapshot =
await technicalsCollection.doc(technical.id).update(
"name": technical.name,
"address": technical.address,
"phoneNum": technical.phoneNum,
"tools": technical.tools,
);
return querySnapshot;
catch (error)
print(error); //here you can see the error messages from firebase
throw 'failed';
如果您需要做某些事情,当发生特定错误时,很遗憾,您必须检查所有错误消息。这是一个例子:Handle exceptions
【讨论】:
以上是关于等到firestore中的数据成功更新的主要内容,如果未能解决你的问题,请参考以下文章