EnumModelType.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace FlutterCodeGenerator.ModelTypes
  6. {
  7. internal class EnumModelType : ComplexModelType
  8. {
  9. public Dictionary<int, string> UserDefinedEnumDictionary { get; }
  10. public EnumModelType(Type type, string name) : base(type, name)
  11. {
  12. UserDefinedEnumDictionary = new Dictionary<int, string>();
  13. var fields = ParameterType.GetFields();
  14. if (fields != null && fields.Length > 1)
  15. {
  16. for (int i = 1; i < fields.Length; i++)
  17. {
  18. var fieldName = fields[i].GetValue(null).ToString();
  19. var fieldValue = (int)fields[i].GetValue(null);
  20. if (fieldValue < 0)
  21. {
  22. continue;
  23. }
  24. else
  25. {
  26. UserDefinedEnumDictionary.Add(fieldValue, fieldName);
  27. }
  28. }
  29. UserDefinedEnumDictionary = UserDefinedEnumDictionary.OrderBy(x => x.Key).ToDictionary(p => p.Key, o => o.Value);
  30. }
  31. var firstChildName = UserDefinedEnumDictionary.FirstOrDefault().Value;
  32. DefaultValue = $"{GetFlutterTypeName()}.{firstChildName}";
  33. }
  34. public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
  35. {
  36. if (Index > 1)
  37. {
  38. return $"{ParameterType.Name}{Index}";
  39. }
  40. else
  41. {
  42. return $"{ParameterType.Name}";
  43. }
  44. }
  45. public override string GetDartString()
  46. {
  47. var dartString = new StringBuilder();
  48. dartString.AppendLine($"enum {GetFlutterTypeName()} {{");
  49. int lastValue = 0;
  50. foreach (var userDefinedEnum in UserDefinedEnumDictionary)
  51. {
  52. var index = userDefinedEnum.Key;
  53. var name = userDefinedEnum.Value;
  54. while (lastValue != index)
  55. {
  56. dartString.AppendLine($"\tplaceHolder_{lastValue},");
  57. lastValue++;
  58. }
  59. if (lastValue == index)
  60. {
  61. dartString.AppendLine($"\t{name},");
  62. lastValue++;
  63. }
  64. }
  65. dartString.AppendLine("}");
  66. return dartString.ToString();
  67. }
  68. protected override void ChangeIndex()
  69. {
  70. if (UserDefinedEnumDictionary != null)
  71. {
  72. var firstChildName = UserDefinedEnumDictionary.FirstOrDefault().Value;
  73. DefaultValue = $"{GetFlutterTypeName()}.{firstChildName}";
  74. }
  75. }
  76. }
  77. }