🍉 加载中...


Dart & Flutter 中的错误捕获与处理

6 minute read

错误分类

Dart 中有两种基本的错误类型,分别是错误(Error)异常(Exception)。那么,它们有什么区别呢?

在 Dart 中,“错误”(error)是指程序运行时遇到的无法通过程序处理的问题,而“异常”(exception)则是指程序运行时遇到的可以通过程序处理的问题。换句话说,“错误”是指导致程序无法继续执行的严重问题,而“异常”则是指导致程序出现意外情况,但程序仍然可以通过一些方式进行恢复的问题。在 Dart 中,我们通常使用 try-catch 语句来处理异常,并在程序中实现相应的恢复措施。

错误(Error)

错误(Errors)通常是由程序无法控制的情况引起的,例如硬件故障或操作系统问题,并且程序通常无法处理它们。在 Dart 中,例如OutOfMemoryErrorStackOverflowError就是错误的例子。当程序遇到错误时,通常会终止执行。

换句话说,错误通常是由于程序无法解决的外部原因导致的,而这些原因通常超出了程序的控制范围,例如硬件故障、操作系统问题等。

异常(Exceptions)

异常(Exceptions)是由程序可以控制的条件引起的,例如无效的用户输入或网络错误。程序可以使用try-catch块捕获和处理异常,以便程序可以从错误中恢复并继续执行。在 Dart 中,常见的异常类型包括FormatExceptionSocketException

在开发 Dart 应用程序和处理运行时问题时,需要区分错误和异常。错误是程序无法处理(恢复)的问题,而异常是程序可以处理(恢复)的问题。

错误处理

Try-Catch

Try-catch 块是 Dart 编程语言处理错误的基本方面。它们允许您处理代码执行期间可能发生的异常。当您在应用程序中使用 try-catch 块时,您可以捕获异常并适当地处理它们。例如,您可能希望向用户显示错误消息或记录错误以进行调试。

以下是如何使用 try-catch 块的示例:

1try {
2  // your code here
3} catch (e) {
4  // handle the error here
5}

ErrorBoundary(Flutter)

Flutter 提供了一个名为 ErrorBoundary 的内置小部件,它允许您捕获错误并向用户显示错误消息。ErrorBoundary 是一个小部件,它捕获其子小部件中发生的错误并向用户显示错误消息。这在可能难以追踪错误和异常的大型应用程序中尤其有用。

以下是如何使用 ErrorBoundary 的示例:

1ErrorBoundary(
2  onError: (error, stackTrace) {
3    // handle the error here
4  },
5  child: YourWidget(),
6)

Assert

Assert 是一种工具,可用于在开发过程中验证有关应用程序状态的假设。如果断言失败,则会抛出异常,这可以帮助您及早捕获和调试错误。您可以使用 assert 语句来检查您的代码是否按预期运行,并在错误成为问题之前识别它们。

以下是如何使用断言的示例:

1assert(myValue != null, 'myValue cannot be null');

番外

在 Dart 中,assert 语句仅会在 开发模式(development mode) 下被执行,在 发布模式(production mode) 下并不会执行。

至于原因,assert 语句被认为是一种开发者工具,用于确保代码在开发阶段的正确性,帮助开发者尽早发现问题并进行调试。发布版的程序通常会避免携带调试信息和检查代码以避免额外的开销。

相关内容

参考资料