Commit 8d581dd25cde5752de7ad3698ed85e1455d9e9bd
1 parent
83beb925
feat: 给字段手写 JsonKey 的 fromJson/toJson,避免build_runner (json_serializable)无法为泛型字段 …
…T data 自动生成代码而报错(Could not generate fromJson code for data because of type T)
Showing
2 changed files
with
16 additions
and
43 deletions
lib/common/request/api_response/api_response_entity.dart
| 1 | 1 | import 'dart:convert'; |
| 2 | 2 | |
| 3 | -import 'package:json_annotation/json_annotation.dart'; | |
| 4 | - | |
| 5 | -import 'api_response_entity.g.dart'; | |
| 6 | - | |
| 7 | -@JsonSerializable(genericArgumentFactories: true) | |
| 3 | +// No json_serializable here; keep a lightweight manual model to mimic old behavior | |
| 4 | +import 'package:wow_english/generated/json/base/json_convert_content.dart'; | |
| 8 | 5 | class ApiResponse<T> { |
| 9 | 6 | int? code; |
| 10 | 7 | String? msg; |
| ... | ... | @@ -12,9 +9,21 @@ class ApiResponse<T> { |
| 12 | 9 | |
| 13 | 10 | ApiResponse(); |
| 14 | 11 | |
| 15 | - factory ApiResponse.fromJson(Map<String, dynamic> json) => $ApiResponseFromJson<T>(json); | |
| 12 | + factory ApiResponse.fromJson(Map<String, dynamic> json) { | |
| 13 | + final resp = ApiResponse<T>(); | |
| 14 | + resp.code = jsonConvert.convert<int>(json['code']); | |
| 15 | + resp.msg = jsonConvert.convert<String>(json['msg']); | |
| 16 | + if (json['data'] != null) { | |
| 17 | + resp.data = JsonConvert.fromJsonAsT<T>(json['data']); | |
| 18 | + } | |
| 19 | + return resp; | |
| 20 | + } | |
| 16 | 21 | |
| 17 | - Map<String, dynamic> toJson() => $ApiResponseToJson(this); | |
| 22 | + Map<String, dynamic> toJson() => <String, dynamic>{ | |
| 23 | + 'code': code, | |
| 24 | + 'msg': msg, | |
| 25 | + 'data': data, | |
| 26 | + }; | |
| 18 | 27 | |
| 19 | 28 | @override |
| 20 | 29 | String toString() { | ... | ... |
lib/common/request/api_response/api_response_entity.g.dart deleted
| 1 | -import 'package:flutter/foundation.dart'; | |
| 2 | - | |
| 3 | -import '../../../generated/json/base/json_convert_content.dart'; | |
| 4 | -import 'api_response_entity.dart'; | |
| 5 | - | |
| 6 | -ApiResponse<T> $ApiResponseFromJson<T>(Map<String, dynamic> json) { | |
| 7 | - final ApiResponse<T> apiResponseEntity = ApiResponse<T>(); | |
| 8 | - final int? code = jsonConvert.convert<int>(json['code']); | |
| 9 | - if (code != null) { | |
| 10 | - apiResponseEntity.code = code; | |
| 11 | - } | |
| 12 | - final String? msg = jsonConvert.convert<String>(json['msg']); | |
| 13 | - if (msg != null) { | |
| 14 | - apiResponseEntity.msg = msg; | |
| 15 | - } | |
| 16 | - String type = T.toString(); | |
| 17 | - T? data; | |
| 18 | - if (kDebugMode) { | |
| 19 | - print("ApiResponse<T> T-type:$type, data-type:${json['data'].runtimeType}"); | |
| 20 | - } | |
| 21 | - if (json['data'] != null) { | |
| 22 | - data = JsonConvert.fromJsonAsT(json['data']); | |
| 23 | - } | |
| 24 | - if (data != null) { | |
| 25 | - apiResponseEntity.data = data; | |
| 26 | - } | |
| 27 | - return apiResponseEntity; | |
| 28 | -} | |
| 29 | - | |
| 30 | -Map<String, dynamic> $ApiResponseToJson(ApiResponse entity) { | |
| 31 | - final Map<String, dynamic> data = <String, dynamic>{}; | |
| 32 | - data['code'] = entity.code; | |
| 33 | - data['msg'] = entity.msg; | |
| 34 | - data['data'] = entity.data; | |
| 35 | - return data; | |
| 36 | -} |