Flutter API空响应检查方法及VS Code自动移除空检查问题咨询
Flutter API调用相关问题解答
一、空检查代码被自动移除的原因
Dart的空安全机制下,http包的Response类中body字段的类型是非可空的String,它永远不会为null。你写的response.body != null属于完全多余的检查,VS Code中默认启用的Dart格式化工具(dart format)或dart fix功能,会自动识别并移除这类无意义的冗余代码。
二、Flutter中正确检查API空响应的方式
针对API响应的空值或异常情况,需要从多个维度处理:
- 检查响应体是否为空字符串:
response.body不会为null,但API可能返回空内容,此时用response.body.isEmpty判断 - 捕获JSON解析异常:API返回的内容可能不符合JSON格式,用
try-catch包裹解析逻辑避免崩溃 - 验证解析结果的类型:确保解析后的数据是预期的List类型,避免类型转换错误
- 处理解析后的空列表:如果API返回空数组,可直接返回空列表或做对应业务处理
修改后的示例代码
Future<List<AlbumList>> _getRecentUpdates() async { String? schoolId = await SharedPreferencesHelper().getSchoolId(); final url = "${ErpGlobal.getBaseUrl()}${ErpGlobal.albumList}$schoolId"; try { final response = await http.post(Uri.parse(url), headers: Utils.header); if (response.statusCode == 200) { if (response.body.isEmpty) { debugPrint("空响应内容"); return []; } final dynamic decodedData = jsonDecode(response.body); if (decodedData is List) { return decodedData.map((json) => AlbumList.fromJson(json)).toList(); } else { debugPrint("响应数据格式错误,不是List类型"); return []; } } else { debugPrint("请求失败,状态码: ${response.statusCode}"); return []; } } catch (e) { debugPrint("请求或解析出错: $e"); return []; } }
内容的提问来源于stack exchange,提问作者Sumit Singh
相关产品推荐
相关产品推荐

