免费样机素材网站,北京网站建设公司如何排版,排名查询系统,如何做物流网站1、FlutterJsonBeanFactory
在Setting-Tools-FlutterJsonBeanFactory里边自定义实体类的后缀#xff0c;默认是entity
复制json到粘贴板#xff0c;右键自己要存放实体的目录#xff0c;可以看到JsonToDartBeanAction Class Name是实体名字#xff0c;会默认加上…1、FlutterJsonBeanFactory
在Setting-Tools-FlutterJsonBeanFactory里边自定义实体类的后缀默认是entity
复制json到粘贴板右键自己要存放实体的目录可以看到JsonToDartBeanAction Class Name是实体名字会默认加上entityJSON TextJson文本null-able勾选后所有属性都是可空的?,不勾选都会加上late延迟初始化 执行Make后生成代码目录如下models项目自建存放实体generated/json是插件生成目录xx_entity.g.daet是实体类生成的辅助类方法 base是存放基础公共代码 后台返回的数据一般是经过一层包装
{code: 200,message: success,data:{id: 1,name: qi1,age: 18}
}而重新用插件生成会生成如下代码
JsonSerializable()
class ApiResponseEntity {int? code;String? message;ApiResponseData? data;ApiResponseEntity();factory ApiResponseEntity.fromJson(MapString, dynamic json) $ApiResponseEntityFromJson(json);MapString, dynamic toJson() $ApiResponseEntityToJson(this);overrideString toString() {return jsonEncode(this);}
}JsonSerializable()
class ApiResponseData {String? id;String? name;int? age;ApiResponseData();factory ApiResponseData.fromJson(MapString, dynamic json) $ApiResponseDataFromJson(json);MapString, dynamic toJson() $ApiResponseDataToJson(this);overrideString toString() {return jsonEncode(this);}
}要是这样每一个接口的都有一个ResponseEntity使用起来不便于统一封装。 所以我们可以把ApiResponseData换成 dynamic文件底部的ApiResponseData信息也全部删除再执行AltJ这样就会自动清理掉整理json_convert_content.dart和api_response_entity.g.dart中的ApiResponseData痕迹。再把dynamic替换成T,并且去除顶部的JsonSerializable()避免下次执行AltJ替换掉自己的自定义。
JsonSerializable()
class ApiResponseEntityT {late int code;late String message;late T data;ApiResponseEntity();factory ApiResponseEntity.fromJson(MapString, dynamic json) $ApiResponseEntityFromJsonT(json);MapString, dynamic toJson() $ApiResponseEntityToJson(this);overrideString toString() {return jsonEncode(this);}
}ApiResponseEntityT $ApiResponseEntityFromJsonT(MapString, dynamic json) {final ApiResponseEntityT apiResponseEntity ApiResponseEntityT();final int? code jsonConvert.convertint(json[code]);if (code ! null) {apiResponseEntity.code code;}final String? message jsonConvert.convertString(json[message]);if (message ! null) {apiResponseEntity.message message;}final T data jsonConvert.convertdynamic(json[data]);if (data ! null) {apiResponseEntity.data data;}return apiResponseEntity;
}MapString, dynamic $ApiResponseEntityToJson(ApiResponseEntity entity) {final MapString, dynamic data String, dynamic{};data[code] entity.code;data[message] entity.message;data[data] entity.data;return data;
}并且把api_response_entity.g.dart移除generated目录因为那个目录会自动删除无用的文件。可以和api_reponse_entity.dart单独存放在一个文件夹当中。
优化后使用
第一次发现reponse的data是null。因为新的插件在 asT方法没有去调用fromJsonAsT这个需要我们自加上否则会失败。
if (_convertFuncMap.containsKey(type)) {return _convertFuncMap[type]!(value) as T;
} else {return fromJsonAsTT(value);// throw UnimplementedError($type unimplemented);
}//单实体String responseData1 {code: 200,message: success,data:{id: 1,name: qi1,age: 21}};//ListString responseData2 {code: 200,message: success,data:[{id: 1,name: qi1,age: 21},{id: 2,name: qi2,age: 22}]};//基础数据类型String responseData3 {code: 200,message: success,data: 18};_apiResponseDecode() {setState(() {response1 ApiResponseEntity.fromJson(jsonDecode(responseData1));response2 ApiResponseEntity.fromJson(jsonDecode(responseData2));response3 ApiResponseEntity.fromJson(jsonDecode(responseData3));});}_getApiResponseContent() {return response1.toString() \n response2.toString() \n response3.toString();}参考链接https://juejin.cn/post/7043721908801503269