我有一个Flutter应用,可与Firebase Firestore后端数据库进行通讯。
我的Dart应用程序中具有以下方法:
_updateData() async {
await db.collection('my_table').document(recordId).updateData({
"field_name": newFieldValue
});
}
当我打电话给_updateData()
时,效果很好。
如果我的电话处于离线状态,则当然不起作用。
我正在尝试添加代码以检测更新是否有错误或以任何方式失败。
updateData
时是否发生错误?dart异步文档(https://dart.dev/codelabs/async-await)并没有真正帮助我。
try {
_updateData();
print('worked!');
} catch (err) {
print('Error!');
print(err);
}
当在线时,它打印“工作!”,当离线时,它打印“工作!”。 (但当然不是)。
try {
await _updateData();
print('worked!');
} catch (err) {
print('Error!');
print(err);
}
在线时,它会打印“工作!”,而在离线时,则不会打印任何内容。
修改方法如下:
Future _updateData() async {
db.collection('my_table').document(recordId).updateData({
"field_name": newFieldValue
}).then((res) {
return true;
}).catchError( (err) {
return false;
});
}
并这样称呼:
var ok = await _updateData();
if (ok) print('worked!');
else print('error!'); // but what _was_ the error
给Unhandled Exception: Failed assertion: boolean expression must not be null
如果我这样称呼它:
_updateData().then((res) {
print('worked!');
print(res);
}).catchError((err) {
print('Error!');
print(err);
});
我“工作了”!在线时为“空”,而“工作中”!离线时为“空”。
我尝试了其他方法,但是以上内容足以表明(1)我尝试了很多东西,以及(2)我不知道自己在做什么。