我正在尝试处理我正在导入的程序包(不是我编写的程序包)中的异常。

例如,第三方包装中的代码是

Future<Map<String, double>> getLocation() => _channel
  .invokeMethod('getLocation')
  .then((result) => result.cast<String, double>())

如果我在try / catch中将自己的项目/代码中的调用包装为getLocation(),它将无法正常工作,因为我的理解是,由于异步,它将通过catchError转储。

确实,如果我编辑第3方文件并添加
  .catchError(( e ) { print( 'In getLocation package error' + e.toString() );});

这捕获了异常(exception)

但是,该代码不是我编写的程序包,我不愿意编辑该文件。我自然可以提出变更请求,但是当其他异步错误出现在您不需要维护的其他软件包中时,还有其他方法可以解决这些异步错误吗?

我已经尝试过
try {
  var test = location.getLocation();
} catch(e) {
  print (e.toString());
}

但这并不能捕获它,只有我破解的第3部分代码中的catchError可以捕获。

最佳答案

最简单的方法是将async / awaittry / catch一起使用

Future<Map<String, double>> getLocation() async {
  try {
    var test = await location.getLocation();
  } catch (e) {
    print(e.toString());
  }
}

08-06 16:07