flutter - 无法处理 SocketException
问题描述
我已经关闭了手机以触发SocketException
错误。我进行了我的 api 调用,在堆栈的顶部,可以在调用之前在我的调试器上看到错误await
。我想在 UI 层处理这个错误。在我的调用堆栈的底部,我看到了方法getData
。我的理解是:我可以将其包装在 try/catch 中并处理异常。但我似乎无法抓住错误。这是方法:
Future<String> getData(String query) async {
try {
List<Suburb> suburbs = await model.getSuburbs('au', query);
if (suburbs.length == 1) {
suburbCode = suburbs[0].code;
isButtonDisabled = false;
return suburbs[0].name;
}
return showDialog<String>(
barrierDismissible: false,
context: context,
builder: (context) => SimpleDialog(
backgroundColor: Colors.black,
title: Text('Please choose your Suburb:'),
children: suburbs
.map((suburb) => SimpleDialogOption(
child: Text(suburb.name),
onPressed: () {
suburbCode = suburb.code;
isButtonDisabled = false;
Navigator.of(context).pop(suburb.name);
}))
.toList(),
));
} on SocketException catch (e) {
print(e);
}
}
该行List<Suburb> suburbs = await model.getSuburbs('au', query);
是我进行 api 调用的位置以及调试器指向的位置。但我似乎无法“进入 catch 块”
解决方案
在 Http post/get 调用中也需要 try-catch 块。因此,只需在 中捕获套接字异常getSuburbs()
,做必要的事情并从那里抛出一个一般异常,如果需要的话。像下面这样的东西会起作用:
Future<string> getSuburbs(string country, string query){
try {
http.Response response =
await http.post(.........
} on SocketException catch (e) {
print(e);
throw Error.noNetworkConnection;
} catch (e) {
print(e);
throw Error.unknown;
}
}
推荐阅读
- ruby - 如何在 Ruby 中获得最大 100 个哈希值?
- python - 短语生成器正在打印错误的输出
- reactjs - 配置对象无效。Webpack 已使用与 ReactJS 中的 API 模式不匹配的配置对象进行初始化
- jquery - 从两个选择组之一中选择至少一个选项
- perl - 如何使用程序参数作为输入来设置 open() 或 die 语句?
- reactjs - ImmutableJS 映射到 javascript 对象
- c# - Blazor 当前上下文中不存在名称“Invoke”
- javascript - 在 Framer Preview 中更新时不会重新渲染功能组件数据
- matlab - 使用 False Position Method 计算 matlab 问题中的绝对和相对误差
- php - w3schools 已关闭,我需要访问 w3.css 文件