在 Flutter 中,可以使用 try-catch
语句捕获 Future 返回的异常。也可以在 whenComplete
或 catchError
方法中处理异常。
下面是一个 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
方法中进行异常处理。