Flutter&Dart Catch Block 未捕获抛出的异常



当服务器不返回200状态码时,我试图捕获抛出的异常。下面是代码:

late Future<List<Data>> datasFuture;
String _warning = "";
@override
void initState() {
try {
datasFuture = RestfulServiceProvider.fetchDatas();
} on Exception {
_warning = "There is no data to fetch!";
}
super.initState();
}
//RestfulServiceProvider class
static Future<List<Data>> fetchDatas() async {
List jsonResponse = [];
final response =
await http.get(Uri.parse('http://localhost:8080/datas'));
if (response.statusCode == 200) {
jsonResponse = json.decode(response.body);
return jsonResponse.map((data) => Data.fromJson(data)).toList();
} else {
throw Exception();
}

}

当异常发生时,代码没有进入异常块,我无法处理错误。有什么想法或解决方案吗?谢谢。

Try-catch块可以捕获在其块边界内发生的异常。您将不会捕获错误,因为您只是将Future分配给变量(而不是等待其值)。那么,块可以捕获单个赋值操作的异常吗?不。变量刚刚赋值,程序继续执行并立即退出try-catch块。你必须等待这个值来捕获它。但是你不能在initState中直接使用async-await语法。所以你有两个选项:

  1. catchError ofFuture

    restfulserviceprovider . fetchdata ().catchError((error){您的代码在这里}));
  2. 使用async-await将其用于另一个函数

    void someFunc () async{
    try {
    await RestfulServiceProvider.fetchDatas();
    } on Exception catch(e) {
    _warning = "There is no data to fetch!";
    }
    }
    

在initState

中调用它

最新更新