EnumModelType.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 GetDartString()
  35. {
  36. var dartString = new StringBuilder();
  37. dartString.AppendLine($"enum {GetFlutterTypeName()} {{");
  38. int lastValue = 0;
  39. foreach (var userDefinedEnum in UserDefinedEnumDictionary)
  40. {
  41. var index = userDefinedEnum.Key;
  42. var name = userDefinedEnum.Value;
  43. while (lastValue != index)
  44. {
  45. dartString.AppendLine($"\tplaceHolder_{lastValue},");
  46. lastValue++;
  47. }
  48. if (lastValue == index)
  49. {
  50. dartString.AppendLine($"\t{name},");
  51. lastValue++;
  52. }
  53. }
  54. dartString.AppendLine("}");
  55. return dartString.ToString();
  56. }
  57. }
  58. }