Browse Source

Change rule for GetDartString

Felix 3 years ago
parent
commit
23843dac77
6 changed files with 285 additions and 250 deletions
  1. 7 7
      CodeGenerator.cs
  2. 4 4
      MethodMap.cs
  3. 271 232
      ModeType.cs
  4. 2 3
      Program.cs
  5. 1 4
      ServiceMap.cs
  6. BIN
      WingInterfaceLibrary.dll

+ 7 - 7
CodeGenerator.cs

@@ -1,9 +1,10 @@
-using System.Text;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Linq;
 using System;
+using System.Collections.Generic;
 using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
 namespace FlutterCodeGenerator
 {
     public class CodeGenerator
@@ -24,7 +25,6 @@ namespace FlutterCodeGenerator
 
         public CodeGenerator(string dllPath, string filePath)
         {
-
             _generatedFolderPath = filePath;
             _dllPath = dllPath;
             _serviceFolderPath = Path.Combine(_generatedFolderPath, "services");
@@ -43,7 +43,7 @@ namespace FlutterCodeGenerator
             }
             var assemblybytes = File.ReadAllBytes(dll);
             var assembly = Assembly.Load(assemblybytes);
-            var interfaceTypes = assembly.GetTypes().Where(x => !x.FullName.Contains("WingMongoDBModule") && x.Name.Contains("Service")).ToList();
+            var interfaceTypes = assembly.GetTypes().Where(x => !x.FullName.Contains("WingInterfaceLibrary.Interface.DBInterface") && x.Name.Contains("Service")).ToList();
             foreach (var interfaceType in interfaceTypes)
             {
                 var sericeName = interfaceType.Name[1..];
@@ -61,9 +61,9 @@ namespace FlutterCodeGenerator
             Directory.CreateDirectory(_generatedFolderPath);
             Directory.CreateDirectory(_serviceFolderPath);
         }
+
         public void GeneratedCode()
         {
-
             CheckDirectory();
             foreach (var serviceMap in _serviceMapDictionary)
             {

+ 4 - 4
MethodMap.cs

@@ -1,8 +1,8 @@
-using System.Data;
 using System.Collections.Generic;
+using System.Data;
+using System.Linq;
 using System.Reflection;
 using System.Text;
-using System.Linq;
 
 namespace FlutterCodeGenerator
 {
@@ -10,7 +10,7 @@ namespace FlutterCodeGenerator
     {
         public List<ModelType> ParameterModeTypes;
         public ModelType ReturnParameterModelType { get; set; }
-        private readonly string  _methodName;
+        private readonly string _methodName;
 
         public MethodMap(MethodInfo method)
         {
@@ -40,7 +40,7 @@ namespace FlutterCodeGenerator
             }
             dartString.AppendLine($"\tFuture<{ReturnParameterModelType.GetFlutterTypeName()}> {LetterConverterHelper.FirstCharToLower(_methodName)}({parameterNames}) async {{");
             dartString.AppendLine($"\t\tvar rpcRst = await call(\"{_methodName}\", {argumentNames});");
-            if (ReturnParameterModelType is SimpleModelType && !(ReturnParameterModelType is IGenericType) && !(ReturnParameterModelType is ArrayModelType))
+            if (ReturnParameterModelType is SimpleModelType && !(ReturnParameterModelType is ListModelType) && !(ReturnParameterModelType is DictionaryModelType) && !(ReturnParameterModelType is ArrayModelType))
             {
                 dartString.AppendLine("\t\treturn rpcRst;");
             }

+ 271 - 232
ModeType.cs

@@ -4,23 +4,17 @@ using System.Text;
 
 namespace FlutterCodeGenerator
 {
-    public interface IGenericType
-    {
-        string GetGenericFlutterName();
-    }
-
     public class ModelType
     {
         public Type ParameterType { get; set; }
 
         /// <summary>
-        ///Name(First Character Lower Case) 
+        ///Name(First Character Lower Case)
         /// </summary>
         public string Name_Lower { get; set; }
 
-
         /// <summary>
-        ///Name(First Character Upper Case) 
+        ///Name(First Character Upper Case)
         /// </summary>
         public string Name_Upper { get; set; }
 
@@ -34,10 +28,27 @@ namespace FlutterCodeGenerator
             DefaultValue = null;
         }
 
-        public virtual string GetFlutterTypeName()
+        public virtual string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
             return ParameterType.Name;
         }
+
+        public virtual string GetDartString()
+        {
+            return string.Empty;
+        }
+
+        protected string QuestionMarkCheck(ModelType child)
+        {
+            if (child.DefaultValue != null)
+            {
+                return "";
+            }
+            else
+            {
+                return "?";
+            }
+        }
     }
 
     public class SimpleModelType : ModelType
@@ -51,7 +62,6 @@ namespace FlutterCodeGenerator
     {
         public StringModeType(string name) : base(typeof(string), name)
         {
-            DefaultValue = "\"\"";
         }
     }
 
@@ -69,7 +79,7 @@ namespace FlutterCodeGenerator
             DefaultValue = "0";
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
             return "int";
         }
@@ -82,7 +92,7 @@ namespace FlutterCodeGenerator
             DefaultValue = "0";
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
             return "double";
         }
@@ -95,7 +105,7 @@ namespace FlutterCodeGenerator
             DefaultValue = "false";
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
             return "bool";
         }
@@ -110,14 +120,164 @@ namespace FlutterCodeGenerator
             Children = new List<ModelType>();
         }
 
-        public override string GetFlutterTypeName()
+        protected string ToJson(List<ModelType> Children)
         {
-            return ParameterType.Name;
+            var source = new StringBuilder();
+            source.AppendLine("\tMap<String, dynamic> toJson() {");
+            source.AppendLine("\t\tfinal map = Map<String, dynamic>();");
+            foreach (var child in Children)
+            {
+                if (child is EnumModeType)
+                {
+                    source.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.index;");
+                }
+                else if (child.DefaultValue != null)
+                {
+                    source.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower};");
+                }
+                else
+                {
+                    source.AppendLine($"\t\tif({child.Name_Lower} != null)");
+                    source.AppendLine($"\t\t\tmap['{child.Name_Upper}'] = {child.Name_Lower};");
+                }
+            }
+            source.AppendLine("\t\treturn map;");
+            source.AppendLine("\t}");
+            return source.ToString();
         }
 
-        public virtual string GetDartString()
+        protected string FromJson(List<ModelType> Children)
         {
-            return string.Empty;
+            var source = new StringBuilder();
+            var flutterTypeName = GetFlutterTypeName();
+            source.AppendLine($"\tfactory {flutterTypeName}.fromJson(Map<String, dynamic> map) {{");
+            foreach (var child in Children)
+            {
+                if (child is ArrayModelType)
+                {
+                    source.AppendLine($"\t\tfinal {child.Name_Lower}Data = map['{child.Name_Upper}'];");
+                }
+                else if (child is ListModelType listModelType)
+                {
+                    if (this is UserDefinedGenericComplexModelType type)//List与Dictionary 不存在该情况
+                    {
+                        if (type.GenericArgumentModelType.ParameterType == listModelType.GenericArgumentModelType.ParameterType)
+                        {
+                            source.AppendLine($"\t\tList<T> {listModelType.Name_Lower}List = [];");
+                            source.AppendLine($"\t\tif (map['{listModelType.Name_Lower}'] != null) {{");
+                            source.AppendLine($"\t\t\t{listModelType.Name_Lower}List.addAll(");
+                            source.AppendLine($"\t\t\t\t\t(map['{listModelType.Name_Lower}'] as List).map((e) => FJsonConvert.fromJson<T>(e)!));");
+                            source.AppendLine($"\t\t}}");
+                        }
+                    }
+                }
+                else if (child is UserDefinedGenericComplexModelType userDefinedGenericComplexModelType)
+                {
+                    if (this is UserDefinedGenericComplexModelType type)//List与Dictionary 不存在该情况
+                    {
+                        if (type.GenericArgumentModelType.ParameterType == userDefinedGenericComplexModelType.GenericArgumentModelType.ParameterType)
+                        {
+                            source.AppendLine($"\t\tList<T> {userDefinedGenericComplexModelType.Name_Lower}List = [];");
+                            source.AppendLine($"\t\tif (map['{userDefinedGenericComplexModelType.Name_Lower}'] != null) {{");
+                            source.AppendLine($"\t\t\t{userDefinedGenericComplexModelType.Name_Lower}List.addAll(");
+                            source.AppendLine($"\t\t\t\t\t(map['{userDefinedGenericComplexModelType.Name_Lower}'] as List).map((e) => FJsonConvert.fromJson<T>(e)!));");
+                            source.AppendLine($"\t\t}}");
+                        }
+                    }
+                }
+            }
+            source.AppendLine($"\t\treturn {flutterTypeName}( ");
+            foreach (var child in Children)
+            {
+                if (child is EnumModeType)
+                {
+                    source.AppendLine($"\t\t\t{child.Name_Lower}: {child.GetFlutterTypeName()}.values.firstWhere((e) => e.index == map['{child.Name_Upper}']),");
+                }
+                else if (child is ArrayModelType)
+                {
+                    source.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}Data != null ? ({child.Name_Lower}Data as List).map((e) => {child.ParameterType.Name.Replace("[]", string.Empty)}.fromJson(e)).toList(): const [],");
+                }
+                else if (child is ListModelType listModelType)
+                {
+                    if (this is UserDefinedGenericComplexModelType type)
+                    {
+                        if (type.GenericArgumentModelType.ParameterType == listModelType.GenericArgumentModelType.ParameterType)
+                        {
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: {listModelType.Name_Lower}List,");
+                        }
+                        else if (listModelType.GenericArgumentModelType is SimpleModelType)
+                        {
+                            var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].cast<{model}>().toList(),");
+                        }
+                        else
+                        {
+                            var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].map((e)=>{model}.fromJson(e as Map<String,dynamic>)).toList(),");
+                        }
+                    }
+                    else if (this is UserDefinedComplexModeType)
+                    {
+                        if (listModelType.GenericArgumentModelType is SimpleModelType)
+                        {
+                            var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].cast<{model}>().toList(),");
+                        }
+                        else
+                        {
+                            var model = listModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].map((e)=>{model}.fromJson(e as Map<String,dynamic>)).toList(),");
+                        }
+                    }
+                }
+                else if (child is DictionaryModelType dictionaryModelType)
+                {
+                    var argumentName1 = dictionaryModelType.GenericArgumentModelTypeList[0].GetFlutterTypeName();
+                    var argumentName2 = dictionaryModelType.GenericArgumentModelTypeList[1].GetFlutterTypeName();
+                    source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].cast<{argumentName1},{argumentName2}>(),");
+                }
+                else if (child is UserDefinedGenericComplexModelType userDefinedGenericComplexModelType)
+                {
+                    if (this is UserDefinedGenericComplexModelType type)
+                    {
+                        if (type.GenericArgumentModelType.ParameterType == userDefinedGenericComplexModelType.GenericArgumentModelType.ParameterType)
+                        {
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: {userDefinedGenericComplexModelType.Name_Lower}List,");
+                        }
+                        else if (userDefinedGenericComplexModelType.GenericArgumentModelType is SimpleModelType)
+                        {
+                            var model = userDefinedGenericComplexModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].cast<{model}>().toList(),");
+                        }
+                        else
+                        {
+                            var model = userDefinedGenericComplexModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].map((e)=>{model}.fromJson(e as Map<String,dynamic>)).toList(),");
+                        }
+                    }
+                    else if (this is UserDefinedComplexModeType)
+                    {
+                        if (userDefinedGenericComplexModelType.GenericArgumentModelType is SimpleModelType)
+                        {
+                            var model = userDefinedGenericComplexModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].cast<{model}>().toList(),");
+                        }
+                        else
+                        {
+                            var model = userDefinedGenericComplexModelType.GenericArgumentModelType.GetFlutterTypeName();
+                            source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'].map((e)=>{model}.fromJson(e as Map<String,dynamic>)).toList(),");
+                        }
+                    }
+                }
+                else
+                {
+                    source.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'],");
+                }
+            }
+            source.AppendLine("\t\t);");
+            source.AppendLine("\t}");
+            source.AppendLine();
+            return source.ToString();
         }
     }
 
@@ -125,7 +285,7 @@ namespace FlutterCodeGenerator
     {
         public EnumModeType(Type type, string name) : base(type, name)
         {
-            var firstChildName =Enum.GetNames(type)[0];
+            var firstChildName = Enum.GetNames(type)[0];
             DefaultValue = $"{GetFlutterTypeName()}.{firstChildName}";
         }
 
@@ -146,45 +306,54 @@ namespace FlutterCodeGenerator
     {
         public ArrayModelType(Type type, string name) : base(type, name)
         {
-            DefaultValue = "const []";
             var arraytypeName = ParameterType.FullName.Replace("[]", string.Empty);
             var arraytype = ParameterType.Assembly.GetType(arraytypeName);
             ModelTypeGenerator.Create(arraytype, "");
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
             return $"List<{ParameterType.Name[0..^2]}>";
         }
     }
 
-    public class ListModelType : SimpleModelType, IGenericType
+    public class ListModelType : SimpleModelType
     {
         public ModelType GenericArgumentModelType;
 
         public ListModelType(Type type, string name) : base(type, name)
         {
-            DefaultValue = "const []";
             var modelType = ModelTypeGenerator.Create(type.GetGenericArguments()[0], "");
             GenericArgumentModelType = modelType;
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
-            var flutterTypeName = ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
-            return flutterTypeName;
-        }
-
-        public string GetGenericFlutterName()
-        {
-            var genericFlutterName = ParameterType.Name[0..^2] + "<T>";
-            return genericFlutterName;
+            if (isSingleName)
+            {
+                return ParameterType.Name[0..^2];
+            }
+            else
+            {
+                if (!isGenericName)
+                {
+                    return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
+                }
+                else
+                {
+                    return ParameterType.Name[0..^2] + "<T>";
+                }
+            }
         }
     }
 
-    public class DictionaryModelType : SimpleModelType, IGenericType
+    /// <summary>
+    /// Dictionary Type, 默认没有复杂型
+    /// </summary>
+    public class DictionaryModelType : SimpleModelType
     {
         public List<ModelType> GenericArgumentModelTypeList;
+
         public DictionaryModelType(Type type, string name) : base(type, name)
         {
             GenericArgumentModelTypeList = new List<ModelType>();
@@ -195,24 +364,40 @@ namespace FlutterCodeGenerator
             }
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
-            var flutterTypeName = ParameterType.Name[0..^2] + "<" + GenericArgumentModelTypeList[0].GetFlutterTypeName() + "," + GenericArgumentModelTypeList[1].GetFlutterTypeName() + ">";
-            flutterTypeName = flutterTypeName.Replace("Dictionary", "Map");
-            return flutterTypeName;
-        }
-
-        public string GetGenericFlutterName()
-        {
-            var genericFlutterName = ParameterType.Name[0..^2] + "<TKey,TValue>";
-            genericFlutterName = genericFlutterName.Replace("Dictionary", "Map");
-            return genericFlutterName;
+            if (isSingleName)
+            {
+                return ParameterType.Name[0..^2].Replace("Dictionary", "Map");
+            }
+            else
+            {
+                var flutterTypeName = ParameterType.Name[0..^2].Replace("Dictionary", "Map");
+                if (!isGenericName)
+                {
+                    flutterTypeName += "<" + GenericArgumentModelTypeList[0].GetFlutterTypeName() + "," + GenericArgumentModelTypeList[1].GetFlutterTypeName() + ">";
+                    return flutterTypeName;
+                }
+                else
+                {
+                    if (isFirstPosition)
+                    {
+                        flutterTypeName += $"<{typeName},T>";
+                    }
+                    else
+                    {
+                        flutterTypeName += $"<T,{typeName}>";
+                    }
+                    return flutterTypeName;
+                }
+            }
         }
     }
 
-
-
-    public class UserDefinedGenericComplexModelType : ComplexModelType, IGenericType
+    /// <summary>
+    /// 自定义泛型复杂类,默认一维
+    /// </summary>
+    public class UserDefinedGenericComplexModelType : ComplexModelType
     {
         public ModelType GenericArgumentModelType;
 
@@ -228,153 +413,65 @@ namespace FlutterCodeGenerator
             GenericArgumentModelType = modelType;
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
-            var flutterTypeName = ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
-            return flutterTypeName;
-        }
-
-        public string GetGenericFlutterName()
-        {
-            var flutterTypeName = ParameterType.Name[0..^2] + "<T>";
-            return flutterTypeName;
-        }
-
-        public override string GetDartString()
-        {
-            var dartString = new StringBuilder();
-            dartString.AppendLine($"class {GetGenericFlutterName()} {{");
-            foreach (var child in Children)
+            if (isSingleName)
             {
-                if (child.DefaultValue != null)
-                {
-                    if (child is IGenericType genericType)
-                    {
-                        dartString.AppendLine($"\tfinal {genericType.GetGenericFlutterName()} {child.Name_Lower};");
-                    }
-                    else
-                    {
-                        dartString.AppendLine($"\tfinal {child.GetFlutterTypeName()} {child.Name_Lower};");
-                    }
-                }
-                else
-                {
-                    if (child is IGenericType genericType)
-                    {
-                        dartString.AppendLine($"\tfinal {genericType.GetGenericFlutterName()}? {child.Name_Lower};");
-                    }
-                    else
-                    {
-                        dartString.AppendLine($"\tfinal {child.GetFlutterTypeName()}? {child.Name_Lower};");
-                    }
-                }
+                return ParameterType.Name[0..^2];
             }
-            dartString.AppendLine();
-            dartString.AppendLine($"\t{ParameterType.Name[0..^2]}({{");
-            foreach (var child in Children)
+            else
             {
-                if (child.DefaultValue != null)
+                if (!isGenericName)
                 {
-                    dartString.AppendLine($"\t\tthis.{child.Name_Lower}={child.DefaultValue},");
+                    return ParameterType.Name[0..^2] + "<" + GenericArgumentModelType.GetFlutterTypeName() + ">";
                 }
                 else
                 {
-                    dartString.AppendLine($"\t\tthis.{child.Name_Lower},");
+                    return ParameterType.Name[0..^2] + "<T>";
                 }
             }
-            dartString.AppendLine("\t});");
-            dartString.AppendLine();
-            dartString.AppendLine($"\tfactory {ParameterType.Name[0..^2]}.fromJson(Map<String, dynamic> map) {{");
-            foreach (var child in Children)
-            {
-                if (child is ArrayModelType)
-                {
-                    dartString.AppendLine($"\t\tfinal {child.Name_Lower}Data = map['{child.Name_Upper}'];");
-                }
-                var genericType = child as IGenericType;
-                if (genericType != null)
-                {
-                    if (child.ParameterType.GetGenericArguments().Length == 1)
-                    {
-                        dartString.AppendLine($"\t\t{genericType.GetGenericFlutterName()} {child.Name_Lower}List = [];");
-                        dartString.AppendLine($"\t\tif (map['{child.Name_Upper}'] != null) {{");
-                        dartString.AppendLine($"\t\t\t{child.Name_Lower}List.addAll((map['{child.Name_Upper}'] as List).map((e) => FJsonConvert.fromJson<T>(e)!));");
-                        dartString.AppendLine("\t\t}");
-                    }
-                    else if (child.ParameterType.GetGenericArguments().Length == 2)
-                    {
-                        dartString.AppendLine($"\t\t{genericType.GetGenericFlutterName()} {child.Name_Lower}Map = {{}};");
-                        dartString.AppendLine($"\t\tif (map['{child.Name_Upper}'] != null) {{");
-                        dartString.AppendLine($"\t\t\t{child.Name_Lower}Map.addAll(map['{child.Name_Upper}'].map((e) => FJsonConvert.fromJson<T>(e)!));");
-                        dartString.AppendLine("\t\t}");
-                    }
-                }
-            }
-            dartString.AppendLine($"\t\treturn {ParameterType.Name[0..^2]}( ");
+        }
+
+        public override string GetDartString()
+        {
+            var dartString = new StringBuilder();
+            dartString.AppendLine($"class {GetFlutterTypeName(false, true)} {{");
             foreach (var child in Children)
             {
-                if (child is EnumModeType)
+                string argumentName;
+                var questionMark = QuestionMarkCheck(child);
+
+                if (child is ListModelType listModelType)
                 {
-                    dartString.AppendLine($"\t\t\t{child.Name_Lower}: {child.GetFlutterTypeName()}.values.firstWhere((e) => e.index == map['{child.Name_Upper}']),");
+                    argumentName = GenericArgumentModelType.ParameterType == listModelType.GenericArgumentModelType.ParameterType ? listModelType.GetFlutterTypeName(false, true) : listModelType.GetFlutterTypeName();
                 }
-                else if (child is ArrayModelType)
+                else if (child is UserDefinedGenericComplexModelType userDefinedGenericComplexModelType)
                 {
-                    dartString.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}Data != null ? ({child.Name_Lower}Data as List).map((e) => {child.Name_Lower.Replace("[]", string.Empty)}.fromJson(e)).toList(): const [],");
-                }
-                else if (child is IGenericType)
-                {
-                    var genericType = child as IGenericType;
-                    if (child.ParameterType.GetGenericArguments().Length == 1)
-                    {
-                        dartString.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}List,");
-                    }
-                    else if (child.ParameterType.GetGenericArguments().Length == 2)
-                    {
-                        dartString.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}Map,");
-                    }
+                    argumentName = GenericArgumentModelType.ParameterType == userDefinedGenericComplexModelType.GenericArgumentModelType.ParameterType ? userDefinedGenericComplexModelType.GetFlutterTypeName(false, true) : userDefinedGenericComplexModelType.GetFlutterTypeName();
                 }
                 else
                 {
-                    dartString.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'],");
+                    argumentName = child.GetFlutterTypeName();
                 }
+                dartString.AppendLine($"\t{argumentName}{questionMark} {child.Name_Lower};");
             }
-            dartString.AppendLine("\t\t);");
-            dartString.AppendLine("\t}");
             dartString.AppendLine();
-            dartString.AppendLine("\tMap<String, dynamic> toJson() {");
-            dartString.AppendLine("\t\tfinal map = Map<String, dynamic>();");
+            dartString.AppendLine($"\t{GetFlutterTypeName()}({{");
             foreach (var child in Children)
             {
-                if (child is EnumModeType)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.index;");
-                }
-                else if (child is ArrayModelType)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.map((e) => e.toJson()).toList();");
-                }
-                else if (child is ListModelType)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.map((dynamic e) => e.toJson()).toList();");
-                }
-                else if (child is UserDefinedGenericComplexModelType)
-                {
-                    dartString.AppendLine($"\t\tvar {child.Name_Lower}map ={child.Name_Lower}.map((dynamic e) => e.toJson()).toList();");
-                    dartString.AppendLine($"\t\tif({child.Name_Lower}map != null)");
-                    dartString.AppendLine($"\t\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}map");
-                }
-                else if (child.DefaultValue != null)
+                if (child.DefaultValue != null)
                 {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower};");
+                    dartString.AppendLine($"\t\tthis.{child.Name_Lower}={child.DefaultValue},");
                 }
                 else
                 {
-                    dartString.AppendLine($"\t\tif({child.Name_Lower} != null)");
-                    dartString.AppendLine($"\t\t\tmap['{child.Name_Upper}'] = {child.Name_Lower};");
+                    dartString.AppendLine($"\t\tthis.{child.Name_Lower},");
                 }
             }
-            dartString.AppendLine("\t\treturn map;");
-            dartString.AppendLine("\t}");
+            dartString.AppendLine("\t});");
+            dartString.AppendLine();
+            dartString.Append(FromJson(Children));
+            dartString.Append(ToJson(Children));
             dartString.AppendLine("}");
             return dartString.ToString();
         }
@@ -392,7 +489,7 @@ namespace FlutterCodeGenerator
             }
         }
 
-        public override string GetFlutterTypeName()
+        public override string GetFlutterTypeName(bool isSingleName = true, bool isGenericName = false, bool isFirstPosition = true, string typeName = null)
         {
             return $"{ParameterType.Name}";
         }
@@ -400,21 +497,21 @@ namespace FlutterCodeGenerator
         public override string GetDartString()
         {
             var dartString = new StringBuilder();
-            var flutterTypeName = GetFlutterTypeName();
-            dartString.AppendLine($"class {flutterTypeName} {{");
+            dartString.AppendLine($"class {GetFlutterTypeName()} {{");
             foreach (var child in Children)
             {
-                if (child.DefaultValue != null)
+                var questionMark = QuestionMarkCheck(child);
+                if (child is ListModelType || child is DictionaryModelType || child is UserDefinedGenericComplexModelType)
                 {
-                    dartString.AppendLine($"\tfinal {child.GetFlutterTypeName()} {child.Name_Lower};");
+                    dartString.AppendLine($"\t{child.GetFlutterTypeName(false, false)}{questionMark} {child.Name_Lower};");
                 }
                 else
                 {
-                    dartString.AppendLine($"\tfinal {child.GetFlutterTypeName()}? {child.Name_Lower};");
+                    dartString.AppendLine($"\t{child.GetFlutterTypeName()}{questionMark} {child.Name_Lower};");
                 }
             }
             dartString.AppendLine();
-            dartString.AppendLine($"\t{flutterTypeName}({{");
+            dartString.AppendLine($"\t{GetFlutterTypeName()}({{");
             foreach (var child in Children)
             {
                 if (child.DefaultValue != null)
@@ -428,67 +525,9 @@ namespace FlutterCodeGenerator
             }
             dartString.AppendLine("\t});");
             dartString.AppendLine();
-            dartString.AppendLine($"\tfactory {flutterTypeName}.fromJson(Map<String, dynamic> map) {{");
-            foreach (var child in Children)
-            {
-                if (child is ArrayModelType)
-                {
-                    dartString.AppendLine($"\t\tfinal {child.Name_Lower}Data = map['{child.Name_Upper}'];");
-                }
-            }
-            dartString.AppendLine($"\t\treturn {flutterTypeName}( ");
-            foreach (var child in Children)
-            {
-                if (child is EnumModeType)
-                {
-                    dartString.AppendLine($"\t\t\t{child.Name_Lower}: {child.GetFlutterTypeName()}.values.firstWhere((e) => e.index == map['{child.Name_Upper}']),");
-                }
-                else if (child is ArrayModelType)
-                {
-                    dartString.AppendLine($"\t\t\t{child.Name_Lower}: {child.Name_Lower}Data != null ? ({child.Name_Lower}Data as List).map((e) => {child.ParameterType.Name.Replace("[]", string.Empty)}.fromJson(e)).toList(): const [],");
-                }
-                else
-                {
-                    dartString.AppendLine($"\t\t\t{child.Name_Lower}: map['{child.Name_Upper}'],");
-                }
-            }
-            dartString.AppendLine("\t\t);");
-            dartString.AppendLine("\t}");
-            dartString.AppendLine();
-            dartString.AppendLine("\tMap<String, dynamic> toJson() {");
-            dartString.AppendLine("\t\tfinal map = Map<String, dynamic>();");
-            foreach (var child in Children)
-            {
-                if (child is EnumModeType)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.index;");
-                }
-                else if (child is ArrayModelType)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.map((e) => e.toJson()).toList();");
-                }
-                else if (child is ListModelType)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}.map((dynamic e) => e.toJson()).toList();");
-                }
-                else if (child is UserDefinedGenericComplexModelType)
-                {
-                    dartString.AppendLine($"\t\tvar {child.Name_Lower}map ={child.Name_Lower}.map((dynamic e) => e.toJson()).toList();");
-                    dartString.AppendLine($"\t\tif({child.Name_Lower}map != null)");
-                    dartString.AppendLine($"\t\t\tmap['{child.Name_Upper}'] = {child.Name_Lower}map");
-                }
-                else if (child.DefaultValue != null)
-                {
-                    dartString.AppendLine($"\t\tmap['{child.Name_Upper}'] = {child.Name_Lower};");
-                }
-                else
-                {
-                    dartString.AppendLine($"\t\tif({child.Name_Lower} != null)");
-                    dartString.AppendLine($"\t\t\tmap['{child.Name_Upper}'] = {child.Name_Lower};");
-                }
-            }
-            dartString.AppendLine("\t\treturn map;");
-            dartString.AppendLine("\t}");
+
+            dartString.Append(FromJson(Children));
+            dartString.Append(ToJson(Children));
             dartString.AppendLine("}");
             return dartString.ToString();
         }

+ 2 - 3
Program.cs

@@ -1,5 +1,5 @@
-using System.IO;
-using System;
+using System;
+using System.IO;
 
 namespace FlutterCodeGenerator
 {
@@ -27,7 +27,6 @@ namespace FlutterCodeGenerator
             catch (Exception ex)
             {
                 Console.WriteLine($"An Error occured when generated!!! Error Message : {ex.Message}");
-
             }
         }
     }

+ 1 - 4
ServiceMap.cs

@@ -1,6 +1,6 @@
-using System.Linq;
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 
 namespace FlutterCodeGenerator
@@ -99,13 +99,10 @@ namespace FlutterCodeGenerator
             {
                 var veturnParameterModelType = method.ReturnParameterModelType;
                 AddUserDefinedComplexReturnType(veturnParameterModelType);
-
             }
             return _userDefinedComplexReturnTypeList;
         }
 
-
-
         private void AddUserDefinedComplexReturnType(ModelType modelType)
         {
             if (modelType is UserDefinedComplexModeType)

BIN
WingInterfaceLibrary.dll