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

Flutter调用Laravel后端获取用户简介时类型不匹配报错排查

问题解决:Flutter类型不匹配错误(_Map<String, dynamic> 不是 String? 的子类型)

错误根源

报错指向BaseResponseEntity.fromJson方法,原因是后端返回的data字段是Map结构({"description": "just a test description"}),但你的BaseResponseEntity类中data属性被定义为String?类型,导致类型转换失败。

解决方案

方案1:修改BaseResponseEntity的data类型

将data的类型改为Map<String, dynamic>?或自定义实体类,适配后端返回格式。

方式一:直接用Map接收数据

修改BaseResponseEntity类定义:

class BaseResponseEntity {
  final int? code;
  final String? msg;
  final Map<String, dynamic>? data; // 改为Map类型

  BaseResponseEntity({this.code, this.msg, this.data});

  factory BaseResponseEntity.fromJson(Map<String, dynamic> json) =>
      BaseResponseEntity(
        code: json["code"],
        msg: json["msg"],
        data: json["data"],
      );

  Map<String, dynamic> toJson() => {
        "counts": code,
        "msg": msg,
        "items": data,
      };
}

方式二:自定义实体类接收(更规范)

先定义ProfileData实体类:

class ProfileData {
  final String? description;

  ProfileData({this.description});

  factory ProfileData.fromJson(Map<String, dynamic> json) => ProfileData(
        description: json["description"],
      );
}

再修改BaseResponseEntity:

class BaseResponseEntity {
  final int? code;
  final String? msg;
  final ProfileData? data; // 改为自定义实体类型

  BaseResponseEntity({this.code, this.msg, this.data});

  factory BaseResponseEntity.fromJson(Map<String, dynamic> json) =>
      BaseResponseEntity(
        code: json["code"],
        msg: json["msg"],
        data: json["data"] != null ? ProfileData.fromJson(json["data"]) : null,
      );

  Map<String, dynamic> toJson() => {
        "counts": code,
        "msg": msg,
        "items": data?.toJson(),
      };
}

方案2:调整后端返回格式(可选)

如果希望data返回纯字符串,修改Laravel接口直接返回description字段值:

public function get_profile_description(Request $request){
    $token = $request->token;
    $res = DB::table("users")->select("description")->where("token","=",$token)->first();
   
    return ["code" => 0, "data" => $res->description ?? "", "msg" => "success"];
}

这种情况下BaseResponseEntity的data可保持String?类型。

验证

修改完成后重新调用接口,即可正常解析返回数据,不会再出现类型不匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:47:47