如何在flutter中使用url_launcher捕获canLaunch异常?

时间:2019-07-22 05:04:44

标签: flutter dart

使用软件包中的代码,我无法捕获该异常。请注意,我想捕获此特定异常。

// from https://pub.dev/packages/url_launcher
_launchURL() async {
  const url = 'myscheme://myurl';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

// my code
try {
  _launchURL();
}
catch (e)
{
  // although the exception occurs, this never happens, and I would rather catch the exact canLaunch exception
}

2 个答案:

答案 0 :(得分:0)

我会尝试将try catch语句放入函数中。我相信发生的事情是try / catch语句仅适用于函数调用,尽管它是异步的,但我不相信它实际上会尝试并返回异常。

所以解决方案看起来像这样:

_launchURL() async {
  try{

  const url = 'myscheme://myurl';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
  }

  catch(e){
  //debug e
  }
}

// my code
launchURL();

答案 1 :(得分:0)

您可以将 .then() 用于业务逻辑。

对我来说,它用于检查应用是否可以在设备上打开

可以是下面的解决方案,

-->  url_launcher: ^6.0.2
-->  https://pub.dev/packages/url_launcher

launch(appLink).then(
  (bool isLaunch) {
    print('isLaunch: $isLaunch');
    if (isLaunch) {
      // Launch Success
    } else {
      // Launch Fail
    }
  },
  onError: (e) {
    print('onError: $e');
  },
).catchError(
  (ex) => print('catchError: $ex'),
);

为我工作。