|
@@ -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();
|
|
|
}
|