json_convert_content.dart 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. // ignore_for_file: non_constant_identifier_names
  2. // ignore_for_file: camel_case_types
  3. // ignore_for_file: prefer_single_quotes
  4. // This file is automatically generated. DO NOT EDIT, all your changes would be lost.
  5. import 'package:flutter/material.dart' show debugPrint;
  6. import 'package:domain/entity/auth_login_entity.dart';
  7. import 'package:domain/entity/captcha_img_entity.dart';
  8. import 'package:domain/entity/id_name_entity.dart';
  9. import 'package:domain/entity/server_time.dart';
  10. import 'package:domain/entity/user_me_entity.dart';
  11. JsonConvert jsonConvert = JsonConvert();
  12. typedef JsonConvertFunction<T> = T Function(Map<String, dynamic> json);
  13. typedef EnumConvertFunction<T> = T Function(String value);
  14. typedef ConvertExceptionHandler = void Function(Object error, StackTrace stackTrace);
  15. extension MapSafeExt<K, V> on Map<K, V> {
  16. T? getOrNull<T>(K? key) {
  17. if (!containsKey(key) || key == null) {
  18. return null;
  19. } else {
  20. return this[key] as T?;
  21. }
  22. }
  23. }
  24. class JsonConvert {
  25. static ConvertExceptionHandler? onError;
  26. JsonConvertClassCollection convertFuncMap = JsonConvertClassCollection();
  27. /// When you are in the development, to generate a new model class, hot-reload doesn't find new generation model class, you can build on MaterialApp method called jsonConvert. ReassembleConvertFuncMap (); This method only works in a development environment
  28. /// https://flutter.cn/docs/development/tools/hot-reload
  29. /// class MyApp extends StatelessWidget {
  30. /// const MyApp({Key? key})
  31. /// : super(key: key);
  32. ///
  33. /// @override
  34. /// Widget build(BuildContext context) {
  35. /// jsonConvert.reassembleConvertFuncMap();
  36. /// return MaterialApp();
  37. /// }
  38. /// }
  39. void reassembleConvertFuncMap() {
  40. bool isReleaseMode = const bool.fromEnvironment('dart.vm.product');
  41. if (!isReleaseMode) {
  42. convertFuncMap = JsonConvertClassCollection();
  43. }
  44. }
  45. T? convert<T>(dynamic value, {EnumConvertFunction? enumConvert}) {
  46. if (value == null) {
  47. return null;
  48. }
  49. if (value is T) {
  50. return value;
  51. }
  52. try {
  53. return _asT<T>(value, enumConvert: enumConvert);
  54. } catch (e, stackTrace) {
  55. debugPrint('asT<$T> $e $stackTrace');
  56. if (onError != null) {
  57. onError!(e, stackTrace);
  58. }
  59. return null;
  60. }
  61. }
  62. List<T?>? convertList<T>(List<dynamic>? value, {EnumConvertFunction? enumConvert}) {
  63. if (value == null) {
  64. return null;
  65. }
  66. try {
  67. return value.map((dynamic e) => _asT<T>(e, enumConvert: enumConvert)).toList();
  68. } catch (e, stackTrace) {
  69. debugPrint('asT<$T> $e $stackTrace');
  70. if (onError != null) {
  71. onError!(e, stackTrace);
  72. }
  73. return <T>[];
  74. }
  75. }
  76. List<T>? convertListNotNull<T>(dynamic value, {EnumConvertFunction? enumConvert}) {
  77. if (value == null) {
  78. return null;
  79. }
  80. try {
  81. return (value as List<dynamic>).map((dynamic e) => _asT<T>(e, enumConvert: enumConvert)!).toList();
  82. } catch (e, stackTrace) {
  83. debugPrint('asT<$T> $e $stackTrace');
  84. if (onError != null) {
  85. onError!(e, stackTrace);
  86. }
  87. return <T>[];
  88. }
  89. }
  90. T? _asT<T extends Object?>(dynamic value,
  91. {EnumConvertFunction? enumConvert}) {
  92. final String type = T.toString();
  93. final String valueS = value.toString();
  94. if (enumConvert != null) {
  95. return enumConvert(valueS) as T;
  96. } else if (type == "String") {
  97. return valueS as T;
  98. } else if (type == "int") {
  99. final int? intValue = int.tryParse(valueS);
  100. if (intValue == null) {
  101. return double.tryParse(valueS)?.toInt() as T?;
  102. } else {
  103. return intValue as T;
  104. }
  105. } else if (type == "double") {
  106. return double.parse(valueS) as T;
  107. } else if (type == "DateTime") {
  108. return DateTime.parse(valueS) as T;
  109. } else if (type == "bool") {
  110. if (valueS == '0' || valueS == '1') {
  111. return (valueS == '1') as T;
  112. }
  113. return (valueS == 'true') as T;
  114. } else if (type == "Map" || type.startsWith("Map<")) {
  115. return value as T;
  116. } else {
  117. if (convertFuncMap.containsKey(type)) {
  118. if (value == null) {
  119. return null;
  120. }
  121. var covertFunc = convertFuncMap[type]!;
  122. if (covertFunc is Map<String, dynamic>) {
  123. return covertFunc(value as Map<String, dynamic>) as T;
  124. } else {
  125. return covertFunc(Map<String, dynamic>.from(value)) as T;
  126. }
  127. } else {
  128. throw UnimplementedError('$type unimplemented,you can try running the app again');
  129. }
  130. }
  131. }
  132. //list is returned by type
  133. static M? _getListChildType<M>(List<Map<String, dynamic>> data) {
  134. if (<AuthLoginEntity>[] is M) {
  135. return data.map<AuthLoginEntity>((Map<String, dynamic> e) => AuthLoginEntity.fromJson(e)).toList() as M;
  136. }
  137. if (<CaptchaImgEntity>[] is M) {
  138. return data.map<CaptchaImgEntity>((Map<String, dynamic> e) => CaptchaImgEntity.fromJson(e)).toList() as M;
  139. }
  140. if (<IdNameEntity>[] is M) {
  141. return data.map<IdNameEntity>((Map<String, dynamic> e) => IdNameEntity.fromJson(e)).toList() as M;
  142. }
  143. if (<ServerTime>[] is M) {
  144. return data.map<ServerTime>((Map<String, dynamic> e) => ServerTime.fromJson(e)).toList() as M;
  145. }
  146. if (<UserMeEntity>[] is M) {
  147. return data.map<UserMeEntity>((Map<String, dynamic> e) => UserMeEntity.fromJson(e)).toList() as M;
  148. }
  149. if (<UserMeHouseholds>[] is M) {
  150. return data.map<UserMeHouseholds>((Map<String, dynamic> e) => UserMeHouseholds.fromJson(e)).toList() as M;
  151. }
  152. if (<UserMeEstates>[] is M) {
  153. return data.map<UserMeEstates>((Map<String, dynamic> e) => UserMeEstates.fromJson(e)).toList() as M;
  154. }
  155. if (<UserMeEstatesAccounts>[] is M) {
  156. return data.map<UserMeEstatesAccounts>((Map<String, dynamic> e) => UserMeEstatesAccounts.fromJson(e)).toList() as M;
  157. }
  158. if (<UserMeEstatesAccountsUnit>[] is M) {
  159. return data.map<UserMeEstatesAccountsUnit>((Map<String, dynamic> e) => UserMeEstatesAccountsUnit.fromJson(e)).toList() as M;
  160. }
  161. if (<UserMeDefaultUnit>[] is M) {
  162. return data.map<UserMeDefaultUnit>((Map<String, dynamic> e) => UserMeDefaultUnit.fromJson(e)).toList() as M;
  163. }
  164. if (<UserMeInformation>[] is M) {
  165. return data.map<UserMeInformation>((Map<String, dynamic> e) => UserMeInformation.fromJson(e)).toList() as M;
  166. }
  167. debugPrint("$M not found");
  168. return null;
  169. }
  170. static M? fromJsonAsT<M>(dynamic json) {
  171. if (json is M) {
  172. return json;
  173. }
  174. if (json is List) {
  175. return _getListChildType<M>(json.map((dynamic e) => e as Map<String, dynamic>).toList());
  176. } else {
  177. return jsonConvert.convert<M>(json);
  178. }
  179. }
  180. }
  181. class JsonConvertClassCollection {
  182. Map<String, JsonConvertFunction> convertFuncMap = {
  183. (AuthLoginEntity).toString(): AuthLoginEntity.fromJson,
  184. (CaptchaImgEntity).toString(): CaptchaImgEntity.fromJson,
  185. (IdNameEntity).toString(): IdNameEntity.fromJson,
  186. (ServerTime).toString(): ServerTime.fromJson,
  187. (UserMeEntity).toString(): UserMeEntity.fromJson,
  188. (UserMeHouseholds).toString(): UserMeHouseholds.fromJson,
  189. (UserMeEstates).toString(): UserMeEstates.fromJson,
  190. (UserMeEstatesAccounts).toString(): UserMeEstatesAccounts.fromJson,
  191. (UserMeEstatesAccountsUnit).toString(): UserMeEstatesAccountsUnit.fromJson,
  192. (UserMeDefaultUnit).toString(): UserMeDefaultUnit.fromJson,
  193. (UserMeInformation).toString(): UserMeInformation.fromJson,
  194. };
  195. bool containsKey(String type) {
  196. return convertFuncMap.containsKey(type);
  197. }
  198. JsonConvertFunction? operator [](String key) {
  199. return convertFuncMap[key];
  200. }
  201. }