json_convert_content.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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:hengyi/data/base_model_entity.dart';
  7. JsonConvert jsonConvert = JsonConvert();
  8. typedef JsonConvertFunction<T> = T Function(Map<String, dynamic> json);
  9. typedef EnumConvertFunction<T> = T Function(String value);
  10. class JsonConvert {
  11. static final Map<String, JsonConvertFunction> convertFuncMap = {
  12. (BaseModelEntity).toString(): BaseModelEntity.fromJson,
  13. };
  14. T? convert<T>(dynamic value, {EnumConvertFunction? enumConvert}) {
  15. if (value == null) {
  16. return null;
  17. }
  18. if (value is T) {
  19. return value;
  20. }
  21. try {
  22. return _asT<T>(value, enumConvert: enumConvert);
  23. } catch (e, stackTrace) {
  24. debugPrint('asT<$T> $e $stackTrace');
  25. return null;
  26. }
  27. }
  28. List<T?>? convertList<T>(List<dynamic>? value, {EnumConvertFunction? enumConvert}) {
  29. if (value == null) {
  30. return null;
  31. }
  32. try {
  33. return value.map((dynamic e) => _asT<T>(e,enumConvert: enumConvert)).toList();
  34. } catch (e, stackTrace) {
  35. debugPrint('asT<$T> $e $stackTrace');
  36. return <T>[];
  37. }
  38. }
  39. List<T>? convertListNotNull<T>(dynamic value, {EnumConvertFunction? enumConvert}) {
  40. if (value == null) {
  41. return null;
  42. }
  43. try {
  44. return (value as List<dynamic>).map((dynamic e) => _asT<T>(e,enumConvert: enumConvert)!).toList();
  45. } catch (e, stackTrace) {
  46. debugPrint('asT<$T> $e $stackTrace');
  47. return <T>[];
  48. }
  49. }
  50. T? _asT<T extends Object?>(dynamic value,
  51. {EnumConvertFunction? enumConvert}) {
  52. final String type = T.toString();
  53. final String valueS = value.toString();
  54. if (enumConvert != null) {
  55. return enumConvert(valueS) as T;
  56. } else if (type == "String") {
  57. return valueS as T;
  58. } else if (type == "int") {
  59. final int? intValue = int.tryParse(valueS);
  60. if (intValue == null) {
  61. return double.tryParse(valueS)?.toInt() as T?;
  62. } else {
  63. return intValue as T;
  64. }
  65. } else if (type == "double") {
  66. return double.parse(valueS) as T;
  67. } else if (type == "DateTime") {
  68. return DateTime.parse(valueS) as T;
  69. } else if (type == "bool") {
  70. if (valueS == '0' || valueS == '1') {
  71. return (valueS == '1') as T;
  72. }
  73. return (valueS == 'true') as T;
  74. } else if (type == "Map" || type.startsWith("Map<")) {
  75. return value as T;
  76. } else {
  77. if (convertFuncMap.containsKey(type)) {
  78. return convertFuncMap[type]!(Map<String, dynamic>.from(value)) as T;
  79. } else {
  80. throw UnimplementedError('$type unimplemented');
  81. }
  82. }
  83. }
  84. //list is returned by type
  85. static M? _getListChildType<M>(List<Map<String, dynamic>> data) {
  86. if(<BaseModelEntity>[] is M){
  87. return data.map<BaseModelEntity>((Map<String, dynamic> e) => BaseModelEntity.fromJson(e)).toList() as M;
  88. }
  89. debugPrint("${M.toString()} not found");
  90. return null;
  91. }
  92. static M? fromJsonAsT<M>(dynamic json) {
  93. if (json is List) {
  94. return _getListChildType<M>(json.map((e) => e as Map<String, dynamic>).toList());
  95. } else {
  96. return jsonConvert.convert<M>(json);
  97. }
  98. }
  99. }