我已经关闭了手机以触发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积木”
发布于 2020-04-17 22:16:46
在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;
}
}https://stackoverflow.com/questions/61271330
复制相似问题