UserDefinedGenericModelType.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using FlutterCodeGenerator.Helper;
  2. using System;
  3. using System.Text;
  4. namespace FlutterCodeGenerator.ModelTypes
  5. {
  6. /// <summary>
  7. /// User Defined Generic Complex Model Type
  8. /// </summary>
  9. internal class UserDefinedGenericModelType : ComplexModelType
  10. {
  11. public ModelType GenericArgumentModelType;
  12. public UserDefinedGenericModelType(Type type, string name) : base(type, name)
  13. {
  14. var properties = type.GetProperties();
  15. foreach (var property in properties)
  16. {
  17. var child = ModelTypeGenerator.Create(property.PropertyType, property.Name);
  18. Children.Add(child);
  19. }
  20. var modelType = ModelTypeGenerator.Create(type.GetGenericArguments()[0], "");
  21. GenericArgumentModelType = modelType;
  22. }
  23. public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
  24. {
  25. if (Index > 1)
  26. {
  27. if (isDefault)
  28. {
  29. return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + Index + ">";
  30. }
  31. if (isGenericName)
  32. {
  33. return ParameterType.Name[0..^2] + Index + "<T>";
  34. }
  35. if (isSingle)
  36. {
  37. return ParameterType.Name[0..^2] + Index;
  38. }
  39. return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + Index + ">";
  40. }
  41. else
  42. {
  43. if (isDefault)
  44. {
  45. return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
  46. }
  47. if (isGenericName)
  48. {
  49. return ParameterType.Name[0..^2] + "<T>";
  50. }
  51. if (isSingle)
  52. {
  53. return ParameterType.Name[0..^2];
  54. }
  55. return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
  56. }
  57. }
  58. public override string GetDartString()
  59. {
  60. var dartString = new StringBuilder();
  61. dartString.AppendLine($"class {GetFlutterTypeName(false, true)} {{");
  62. foreach (var child in Children)
  63. {
  64. string argumentName;
  65. var questionMark = QuestionMarkCheck(child);
  66. if (child is ListModelType listModelType)
  67. {
  68. argumentName = GenericArgumentModelType.ParameterType == listModelType.GenericArgumentModelType.ParameterType ? listModelType.GetFlutterTypeName(false, true) : listModelType.GetFlutterTypeName();
  69. }
  70. else if (child is UserDefinedGenericModelType userDefinedGenericComplexModelType)
  71. {
  72. argumentName = GenericArgumentModelType.ParameterType == userDefinedGenericComplexModelType.GenericArgumentModelType.ParameterType ? userDefinedGenericComplexModelType.GetFlutterTypeName(false, true) : userDefinedGenericComplexModelType.GetFlutterTypeName();
  73. }
  74. else
  75. {
  76. argumentName = child.GetFlutterTypeName();
  77. }
  78. dartString.AppendLine($"\t{argumentName}{questionMark} {child.Name_Lower};");
  79. }
  80. dartString.AppendLine();
  81. dartString.AppendLine($"\t{GetFlutterTypeName(false, false, true)}({{");
  82. foreach (var child in Children)
  83. {
  84. if (child.DefaultValue != null)
  85. {
  86. dartString.AppendLine($"\t\tthis.{child.Name_Lower} = {child.DefaultValue},");
  87. }
  88. else
  89. {
  90. dartString.AppendLine($"\t\tthis.{child.Name_Lower},");
  91. }
  92. }
  93. dartString.AppendLine("\t});");
  94. dartString.AppendLine();
  95. dartString.Append(FromJson(Children));
  96. dartString.Append(ToJson(Children));
  97. dartString.AppendLine("}");
  98. return dartString.ToString();
  99. }
  100. }
  101. }