using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FlutterCodeGenerator.ModelTypes { internal class EnumModelType : ComplexModelType { public Dictionary UserDefinedEnumDictionary { get; } public EnumModelType(Type type, string name) : base(type, name) { UserDefinedEnumDictionary = new Dictionary(); var fields = ParameterType.GetFields(); if (fields != null && fields.Length > 1) { for (int i = 1; i < fields.Length; i++) { var fieldName = fields[i].GetValue(null).ToString(); var fieldValue = (int)fields[i].GetValue(null); if (fieldValue < 0) { continue; } else { UserDefinedEnumDictionary.Add(fieldValue, fieldName); } } UserDefinedEnumDictionary = UserDefinedEnumDictionary.OrderBy(x => x.Key).ToDictionary(p => p.Key, o => o.Value); } var firstChildName = UserDefinedEnumDictionary.FirstOrDefault().Value; DefaultValue = $"{GetFlutterTypeName()}.{firstChildName}"; } public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false) { if (Index > 1) { return $"{ParameterType.Name}{Index}"; } else { return $"{ParameterType.Name}"; } } public override string GetDartString() { var dartString = new StringBuilder(); dartString.AppendLine($"enum {GetFlutterTypeName()} {{"); int lastValue = 0; foreach (var userDefinedEnum in UserDefinedEnumDictionary) { var index = userDefinedEnum.Key; var name = userDefinedEnum.Value; while (lastValue != index) { dartString.AppendLine($"\tplaceHolder_{lastValue},"); lastValue++; } if (lastValue == index) { dartString.AppendLine($"\t{name},"); lastValue++; } } dartString.AppendLine("}"); return dartString.ToString(); } protected override void ChangeIndex() { if (UserDefinedEnumDictionary != null) { var firstChildName = UserDefinedEnumDictionary.FirstOrDefault().Value; DefaultValue = $"{GetFlutterTypeName()}.{firstChildName}"; } } } }