瀏覽代碼

Enum对于空缺的值增加占位符,
修复ExtraObjectModelType FromJson的异常。

Felix 2 年之前
父節點
當前提交
28753f70c6
共有 1 個文件被更改,包括 42 次插入9 次删除
  1. 42 9
      ModeType.cs

+ 42 - 9
ModeType.cs

@@ -329,7 +329,7 @@ namespace FlutterCodeGenerator
                     {
                         source.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}Data != null ? ({child.Name_Lower}Data as List).map((e) => e as int).toList(): null,");
                     }
-                    else if (modelType is SimpleModelType)
+                    else if (modelType is SimpleModelType && (modelType is ExtraObjectModelType))
                     {
                         source.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}Data != null ? ({child.Name_Lower}Data as List).map((e) => e as {child.ParameterType.Name.Replace("[]", string.Empty)}).toList(): null,");
                     }
@@ -350,7 +350,7 @@ namespace FlutterCodeGenerator
                         {
                             source.AppendLine($"\t\t\t{child.Name_Lower}: {listModelType.Name_Lower}List,");
                         }
-                        else if (listModelType.GenericArgumentModelType is SimpleModelType)
+                        else if (listModelType.GenericArgumentModelType is SimpleModelType && !(listModelType.GenericArgumentModelType is ExtraObjectModelType))
                         {
                             var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
                             source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'] != null ? map['{child.Name_Upper}'].cast<{model}>().toList() : null,");
@@ -372,7 +372,7 @@ namespace FlutterCodeGenerator
                         {
                             source.AppendLine($"\t\t\t{child.Name_Lower}: {listModelType.Name_Lower}List,");
                         }
-                        else if (listModelType.GenericArgumentModelType is SimpleModelType)
+                        else if (listModelType.GenericArgumentModelType is SimpleModelType && !(listModelType.GenericArgumentModelType is ExtraObjectModelType))
                         {
                             var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
                             source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'] != null ? map['{child.Name_Upper}'].cast<{model}>().toList() : null,");
@@ -390,7 +390,7 @@ namespace FlutterCodeGenerator
                     }
                     else if (this is UserDefinedModeType || this is UserDefinedDerivedModelType)
                     {
-                        if (listModelType.GenericArgumentModelType is SimpleModelType)
+                        if (listModelType.GenericArgumentModelType is SimpleModelType && !(listModelType.GenericArgumentModelType is ExtraObjectModelType))
                         {
                             var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
                             source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'] != null ? map['{child.Name_Upper}'].cast<{model}>().toList() : null,");
@@ -421,7 +421,7 @@ namespace FlutterCodeGenerator
                         {
                             source.AppendLine($"\t\t\t{child.Name_Lower}: {userDefinedGenericModelType.Name_Lower}List,");
                         }
-                        else if (userDefinedGenericModelType.GenericArgumentModelType is SimpleModelType)
+                        else if (userDefinedGenericModelType.GenericArgumentModelType is SimpleModelType && !(userDefinedGenericModelType.GenericArgumentModelType is ExtraObjectModelType))
                         {
                             var model = userDefinedGenericModelType.GenericArgumentModelType.GetFlutterTypeName();
                             source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'] != null ? map['{child.Name_Upper}'].cast<{model}>().toList() : null,");
@@ -439,7 +439,7 @@ namespace FlutterCodeGenerator
                     }
                     else if (this is UserDefinedModeType)
                     {
-                        if (userDefinedGenericModelType.GenericArgumentModelType is SimpleModelType)
+                        if (userDefinedGenericModelType.GenericArgumentModelType is SimpleModelType && !(userDefinedGenericModelType.GenericArgumentModelType is ExtraObjectModelType))
                         {
                             var model = userDefinedGenericModelType.GenericArgumentModelType.GetFlutterTypeName();
                             source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'] != null ? map['{child.Name_Upper}'].cast<{model}>().toList() : null,");
@@ -474,9 +474,30 @@ namespace FlutterCodeGenerator
 
     public class EnumModeType : ComplexModelType
     {
+        private Dictionary<int, string> _userDefinedEnumDictionary;
+
         public EnumModeType(Type type, string name) : base(type, name)
         {
-            var firstChildName = Enum.GetNames(type)[0];
+            _userDefinedEnumDictionary = new Dictionary<int, string>();
+            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}";
         }
 
@@ -484,9 +505,21 @@ namespace FlutterCodeGenerator
         {
             var dartString = new StringBuilder();
             dartString.AppendLine($"enum {GetFlutterTypeName()} {{");
-            foreach (var enumvalue in Enum.GetNames(ParameterType))
+            int lastValue = 0;
+            foreach (var userDefinedEnum in _userDefinedEnumDictionary)
             {
-                dartString.AppendLine($"\t{enumvalue},");
+                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();