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

Flutter中服务端API响应建模出现类型不匹配错误如何解决

问题原因

json.decode() 仅会将JSON字符串解析为Dart原生的_InternalLinkedHashMap<String, dynamic>类型,不会自动转换为你自定义的AutoAuthenticateResponse业务模型实例,直接赋值会触发类型不匹配错误。

修复方案

步骤1:给模型类添加fromJson序列化方法

你需要手动为自定义模型添加JSON转实例的解析逻辑,修改后的模型代码如下:

class ServerResponse {
  final bool success;
  final String message;

  ServerResponse({
    required this.success,
    required this.message,
  });
}

class _AuthAutenticationData {
  final String id;

  _AuthAutenticationData({
    required this.id,
  });

  // 新增JSON解析方法
  factory _AuthAutenticationData.fromJson(Map<String, dynamic> json) {
    return _AuthAutenticationData(
      id: json['id'] as String,
    );
  }
}

class AutoAuthenticateResponse extends ServerResponse {
  final _AuthAutenticationData? data;

  AutoAuthenticateResponse({
    required super.success,
    required super.message,
    this.data,
  });

  // 新增JSON解析方法
  factory AutoAuthenticateResponse.fromJson(Map<String, dynamic> json) {
    return AutoAuthenticateResponse(
      success: json['success'] as bool,
      message: json['message'] as String,
      // 请求成功时才解析data字段
      data: json['success'] ? _AuthAutenticationData.fromJson(json['data']) : null,
    );
  }
}

步骤2:修改接口调用处的解析逻辑

把原来直接赋值的代码替换为调用fromJson方法解析:

Future<void> autoAuth() async {
  final url = Uri.parse('${this._baseURL.toString()}/auto-auth');

  try {
    final response = await http.post(url, headers: {
      'Authorization': 'SXXX',
    });
    print(response.body);
    // 先把JSON字符串解析为Map,再转自定义模型
    final Map<String, dynamic> jsonMap = json.decode(response.body);
    final AutoAuthenticateResponse responseBody = AutoAuthenticateResponse.fromJson(jsonMap);

    if (responseBody.success) {
      return setUser(User(id: responseBody.data!.id));
    }

    setUser(null);
  } catch (error) {
    print(error);
    setUser(null);
  }
}
可选优化

如果项目里模型类较多,手写fromJson容易出错,可以使用官方的json_serializable库自动生成序列化代码,减少手动编码的失误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:57:00