Flutter异常处理插件try_catch的使用

Flutter异常处理插件try_catch的使用

try_catch 插件用于调用异步函数,并在发生异常时打印错误并忽略该异常。返回值与函数相同。

使用方法

以下是一个完整的示例代码:

import 'package:try_catch/init.dart'; // 导入try_catch插件

// 定义一个可能抛出异常的异步函数
Future<int> test1() async {
  await Future.delayed(Duration(seconds: 1)); // 模拟异步操作
  throw Exception('测试错误'); // 抛出异常
}

// 定义一个正常返回结果的异步函数
Future<int> test2() async {
  await Future.delayed(Duration(seconds: 1)); // 模拟异步操作
  return 1; // 返回结果
}

void main() async {
  print('等待1秒后执行'); // 输出提示信息
  var r = await tryCatch(() => test1()); // 调用test1,并捕获异常
  print(r); // 输出 null,因为异常被忽略
  print(await tryCatch(() => test2())); // 调用test2,并返回结果
  print('完成'); // 输出完成信息
}

示例代码

import 'package:try_catch/init.dart';

Future<int> test1() async {
  await Future.delayed(Duration(seconds: 1));
  throw Exception('测试错误');
}

Future<int> test2() async {
  await Future.delayed(Duration(seconds: 1));
  return 1;
}

void main() async {
  print('等待1秒后执行');
  var r = await tryCatch(() => test1());
  print(r); // 输出 null
  print(await tryCatch(() => test2())); // 输出 1
  print('完成');
}

更多关于Flutter异常处理插件try_catch的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter异常处理插件try_catch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,try_catch 并不是一个特定的插件,而是 Dart 语言中的一种异常处理机制。Dart 使用 trycatch 关键字来捕获和处理异常。try 块中包含可能抛出异常的代码,而 catch 块用于捕获并处理这些异常。

基本用法

void main() {
  try {
    // 可能抛出异常的代码
    int result = 10 ~/ 0; // 这里会抛出一个整数除以零的异常
    print('Result: $result');
  } catch (e) {
    // 捕获并处理异常
    print('An error occurred: $e');
  } finally {
    // 无论是否发生异常,finally 块中的代码都会执行
    print('Finally block executed');
  }
}

输出

An error occurred: IntegerDivisionByZeroException
Finally block executed

解释

  • try 块中的代码 10 ~/ 0 会抛出一个 IntegerDivisionByZeroException 异常。
  • catch 块捕获了这个异常,并打印了错误信息。
  • finally 块中的代码无论是否发生异常都会执行,通常用于释放资源或执行清理操作。

捕获特定类型的异常

你可以使用 on 关键字来捕获特定类型的异常。

void main() {
  try {
    int result = 10 ~/ 0;
    print('Result: $result');
  } on IntegerDivisionByZeroException {
    // 只捕获整数除以零的异常
    print('Cannot divide by zero');
  } catch (e) {
    // 捕获其他类型的异常
    print('An error occurred: $e');
  }
}

输出

Cannot divide by zero

获取堆栈信息

你还可以通过 catch 获取堆栈信息:

void main() {
  try {
    int result = 10 ~/ 0;
    print('Result: $result');
  } catch (e, s) {
    // e 是异常对象,s 是堆栈信息
    print('An error occurred: $e');
    print('Stack trace: $s');
  }
}

输出

An error occurred: IntegerDivisionByZeroException
Stack trace: #0      int._divide (dart:core-patch/integers.dart:19:7)
#1      main (file:///path/to/project/main.dart:3:19)
#2      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:19)
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)
回到顶部