【问题标题】:How to catch 2 PlatformException errors ( Flutter )如何捕获 2 个 PlatformException 错误(Flutter)
【发布时间】:2021-03-11 20:44:30
【问题描述】:

我有 2 个 PlatformException 错误,一个是(电子邮件地址格式错误)另一个是(电子邮件地址已被另一个帐户使用),我知道如何使用 ( 在 PlatformException catch (err) {} catch (err) {} 上,但我怎样才能同时捕获它们?

【问题讨论】:

  • 如果它们都是PlatformException,那么on PlatformException catch (e) 会同时捕获它们。另外,永远不要笼罩catch (e),因为这会隐藏您应该单独捕获和处理的各种细微错误。
  • 源自哪个错误?听起来像是来自包的异常,而不是来自 Flutter SDK
  • @Bach 是的,这是 FireBaseAuth 包的一个例外(注册方法)
  • @Abion47 愿上帝原谅你(:我被困住了 4 小时,因为你告诉我永远不要做毯子抓(e)但是当我添加它时它起作用了哈哈,无论如何感谢你的帮助!
  • @kingstation99 不,关键是您不这样做,因为它是那些易于使用且易于滥用的解决方案之一。使用一揽子捕获可能会起作用,但是您现在在代码中有一个位置,如果出现任何问题,您将永远不会知道,除非它导致其他问题出错,然后您将花费数小时追踪源而不是您的应用程序崩溃你立即知道在哪里以及为什么。我不是说不使用它是因为它不起作用,我说不使用它是因为它是一种糟糕且懒惰的习惯,而且总体而言是一种不好的做法。

标签: firebase flutter dart firebase-authentication


【解决方案1】:

你可以用一个catch捕获PlatformException,然后检查错误代码:

try {
  ...
} on PlatformException catch (e) {
  switch (e.code) {
    case 'ERROR_WRONG_PASSWORD':
      ...
      break;
    case 'ERROR_USER_NOT_FOUND':
      ...
      break;
    default:
      ...
  }
}

【讨论】:

    【解决方案2】:

    你可以在里面添加一个 if 条件

    on PlatformException catch (err) {} 
    

    并比较 err.code 、err.message 或 err.details,具体取决于您要查找的消息在哪里

    【讨论】:

    • 非常感谢!有效。但我需要补充一点,您必须编写这样的代码:在 PlatformException catch (err) {} catch (err) { } 上,您将 if 条件放在第二个 catch err 中,否则它将不起作用。
    猜你喜欢
    • 2023-03-18
    • 2020-12-26
    • 2022-07-12
    • 2018-10-29
    • 2023-02-13
    • 2020-03-26
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多