Flutter Future 如何处理异常?

26 min read

在 Flutter 中,可以使用 try-catch 语句捕获 Future 返回的异常。也可以在 whenCompletecatchError 方法中处理异常。

下面是一个 try-catch 的示例代码:

Future<void> fetchUserData() async {
  try {
    final responseData = await http.get(
        Uri.parse('https://jsonplaceholder.typicode.com/users/1'));
    final userData = json.decode(responseData.body);
    print(userData);
  } catch (error) {
    print('Error fetching user data: $error');
  }
}

try 代码块中执行异步操作。如果异步操作返回的 Future 抛出异常,则会进入 catch 代码块中进行异常处理。

另外,还可以使用 whenComplete 方法来处理异常。whenComplete 会在 Future 执行完毕时执行,无论是正常结束还是异常结束。下面是一个 whenComplete 的示例代码:

Future<void> fetchUserData() async {
  try {
    final responseData = await http.get(
        Uri.parse('https://jsonplaceholder.typicode.com/users/1'));
    final userData = json.decode(responseData.body);
    print(userData);
  } catch (error) {
    print('Error fetching user data: $error');
  } finally {
    print('Completed fetching user data.');
  }
}

在这个示例中,不管异步操作是否出现异常,finally 中的代码都会被执行。这个功能可以用来处理一些和异步操作完成相关的操作,比如关闭资源等。

最后一个处理 Future 异常的方法是使用 catchError 方法,如下所示:

Future<void> fetchUserData() async {
  http.get(Uri.parse('https://jsonplaceholder.typicode.com/users/1'))
      .then((responseData) {
        final userData = json.decode(responseData.body);
        print(userData);
      })
      .catchError((error) {
        print('Error fetching user data: $error');
      });
}

这个示例中,使用 then 方法和 catchError 方法来处理 Future 异常。在 then 方法中执行异步操作,当异步操作出现异常时,会进入 catchError 方法中进行异常处理。