首页 > 解决方案 > 无法处理 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 块”

标签: flutterdart

解决方案


在 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;
      }
}

推荐阅读