You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter发起GET请求时报错Expected a value of type 'String', but got one of type 'Null'如何解决

报错原因
  • 该错误是Dart空安全校验触发的类型不匹配问题:代码中声明了非空String类型的变量/字段,但实际赋值时拿到了Null类型的值,二者类型不兼容导致抛出异常。
  • 常见触发场景:
    • 接口返回的JSON结构中,你预设一定存在的字符串字段实际不存在/返回了null,解析时直接强转为String类型
    • GET请求本身失败(如无网络、接口返回4xx/5xx状态码),返回的响应体为null,你直接按照字符串处理
    • 拼接请求URL时用到了可能为null的动态参数,未判空就直接拼接到字符串中
解决方法
  1. 给请求逻辑加全链路异常校验
    使用try-catch包裹请求代码,先判断响应状态码为成功后再处理返回内容:
import 'package:http/http.dart' as http;

try {
  final response = await http.get(Uri.parse("你的请求URL"));
  if (response.statusCode == 200) {
    // 解析response.body的逻辑
  } else {
    print("请求异常,状态码:${response.statusCode}");
  }
} catch (e) {
  print("请求报错:$e");
}
  1. JSON解析时对字符串字段做空兼容处理
    不要直接把JSON字段强转为非空String,可选择声明可空类型,或者给空值设置兜底默认值:
// 错误写法
String userName = json["user_name"] as String;

// 正确写法1:声明为可空字符串
String? userName = json["user_name"] as String?;

// 正确写法2:空值时使用默认值
String userName = json["user_name"] as String? ?? "匿名用户";
  1. 动态拼接URL前先校验参数非空
    如果你的请求URL包含动态传入的参数,拼接前先判断参数不为空再执行后续请求逻辑:
String? userId = getUserId();
// 先判空再拼接
if (userId == null) {
  print("用户ID为空,无法发起请求");
  return;
}
String requestUrl = "https://xxx.com/api/user?user_id=$userId";

内容的提问来源于stack exchange,提问作者francesco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:10