Flutter&Firebase:如何检测updateData是否失败

时间:2019-10-29 05:53:21

标签: firebase asynchronous flutter dart error-handling

我有一个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)并没有真正帮助我。

我尝试了以下方法:

1。

try {
  _updateData();
  print('worked!');
} catch (err) {
  print('Error!');
  print(err);
}

当在线时,它打印“工作!”,当离线时,它打印“工作!”。 (但当然不是)。

2。

try {
  await _updateData();
  print('worked!');
} catch (err) {
  print('Error!');
  print(err);
}

在线时,它会打印“工作!”,而在离线时,则不会打印任何内容。

3。

修改方法如下:

  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

4。

如果我这样称呼它:

_updateData().then((res) {
  print('worked!');
  print(res);
}).catchError((err) {
  print('Error!');
  print(err);
});

我“工作了”!在线时为“空”,而“工作中”!离线时为“空”。


我尝试了其他方法,但是以上内容足以表明(1)我尝试了很多东西,以及(2)我不知道自己在做什么。

0 个答案:

没有答案