Browse Source

优化可空处理

Felix 2 years ago
parent
commit
9df3453a39
2 changed files with 70 additions and 5 deletions
  1. 50 1
      ModeType.cs
  2. 20 4
      ModeTypeGenerator.cs

+ 50 - 1
ModeType.cs

@@ -92,6 +92,18 @@ namespace FlutterCodeGenerator
         }
     }
 
+    public class IntNullableModeType : SimpleModelType
+    {
+        public IntNullableModeType(string name) : base(typeof(int?), name)
+        {
+        }
+
+        public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
+        {
+            return "int";
+        }
+    }
+
     public class ByteModelType : SimpleModelType
     {
         public ByteModelType(string name) : base(typeof(byte), name)
@@ -105,6 +117,18 @@ namespace FlutterCodeGenerator
         }
     }
 
+    public class ByteNullableModelType : SimpleModelType
+    {
+        public ByteNullableModelType(string name) : base(typeof(byte?), name)
+        {
+        }
+
+        public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
+        {
+            return "int";
+        }
+    }
+
     public class VoidModelType : SimpleModelType
     {
         public VoidModelType(string name) : base(typeof(void), name)
@@ -119,7 +143,7 @@ namespace FlutterCodeGenerator
 
     public class DoubleModeType : SimpleModelType
     {
-        public DoubleModeType(string name) : base(typeof(int), name)
+        public DoubleModeType(string name) : base(typeof(double), name)
         {
             DefaultValue = "0";
         }
@@ -130,6 +154,19 @@ namespace FlutterCodeGenerator
         }
     }
 
+    public class DoubleNullableModeType : SimpleModelType
+    {
+        public DoubleNullableModeType(string name) : base(typeof(double?), name)
+        {
+        }
+
+        public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
+        {
+            return "double";
+        }
+    }
+
+
     public class BoolModeType : SimpleModelType
     {
         public BoolModeType(string name) : base(typeof(bool), name)
@@ -143,6 +180,18 @@ namespace FlutterCodeGenerator
         }
     }
 
+    public class BoolNullableModeType : SimpleModelType
+    {
+        public BoolNullableModeType(string name) : base(typeof(bool?), name)
+        {
+        }
+
+        public override string GetFlutterTypeName(bool isDefault = true, bool isGenericName = false, bool isSingle = false)
+        {
+            return "bool";
+        }
+    }
+
     public class ExtraObjectModelType : SimpleModelType
     {
         public ExtraObjectModelType(Type type, string name) : base(type, name)

+ 20 - 4
ModeTypeGenerator.cs

@@ -22,18 +22,30 @@ namespace FlutterCodeGenerator
                     duplicatedTime = _tempTypes[type];
                 }
                 duplicatedTime++;
-                if (type == typeof(int) || type == typeof(long) || type == typeof(short) || type == typeof(int?) || type == typeof(long?) || type == typeof(short?))
+                if (type == typeof(int) || type == typeof(long) || type == typeof(short))
                 {
                     return new IntModeType(argName);
                 }
-                else if (type == typeof(float) || type == typeof(double) || type == typeof(float?) || type == typeof(double?))
+                else if (type == typeof(int?) || type == typeof(long?) || type == typeof(short?))
+                {
+                    return new IntNullableModeType(argName);
+                }
+                else if (type == typeof(float) || type == typeof(double))
                 {
                     return new DoubleModeType(argName);
                 }
-                else if (type == typeof(bool) || (type == typeof(bool?)))
+                else if (type == typeof(float?) || type == typeof(double?))
+                {
+                    return new DoubleNullableModeType(argName);
+                }
+                else if (type == typeof(bool))
                 {
                     return new BoolModeType(argName);
                 }
+                else if (type == typeof(bool?))
+                {
+                    return new BoolNullableModeType(argName);
+                }
                 else if (type == typeof(string) || type == typeof(char) || type.BaseType.Name == "BaseParamsString" || type.BaseType.Name == "BaseString")
                 {
                     return new StringModeType(argName);
@@ -42,10 +54,14 @@ namespace FlutterCodeGenerator
                 {
                     return new DateTimeModeType(argName);
                 }
-                else if (type == typeof(byte) || type == typeof(byte?))
+                else if (type == typeof(byte))
                 {
                     return new ByteModelType(argName);
                 }
+                else if (type == typeof(byte?))
+                {
+                    return new ByteNullableModelType(argName);
+                }
                 else if (type == typeof(void))
                 {
                     return new VoidModelType(argName);