jsoninflater 0.1.0 copy "jsoninflater: ^0.1.0" to clipboard
jsoninflater: ^0.1.0 copied to clipboard

outdated

json inflater metadata

JsonInflater #

详细介绍: #

Flutter中Json序列化之--支持泛型

如何使用 #

  1. 创建模型,添加注解JsonFlater以及mixin类。如:

    @JsonInflater()
    class TestNonGenerics with PartOfTestNonGenerics {
       
      String msg;
       
      TestNonGenerics(this.msg);
       
      @override
      String toString() {
        return 'TestNonGenerics{msg: $msg}';
      }
    }
       
    @JsonInflater()
    class TestGenerics1<K> with PartOfTestGenerics1 {
       
      String msg;
      K data;
       
      TestGenerics1(this.msg, this.data);
       
      @override
      String toString() {
        return 'TestGenerics1{msg: $msg, data: $data}';
      }
    }
       
    @JsonInflater()
    class TestGenerics2<K> with PartOfTestGenerics2 {
       
      String msg;
      K data;
       
      TestGenerics2(this.msg, this.data);
       
       
      @override
      String toString() {
        return 'TestGenerics2{msg: $msg, data: $data}';
      }
    }
    

    mixin类是代码生成的,格式是:PartOf${className}。功能是提供toJson()parse()方法。

    创建一个Json工具类,添加JsonGather注解。

    @JsonGather()
    class JsonUtil {
    
    }
    

    一个项目中只能有一个JsonGather注解。

  2. 运行命令,生成代码:

    flutter packages pub run build_runner clean
    flutter packages pub run build_runner build
    
  3. 使用:

    • toJson.

      var test = JsonTest("json test");
      print(test.toJson()); // -> {msg: json test}
      
    • parse<T>()。本框架提供的一个将Map转换成模型的方法。提供5种不同泛型数量的方法:

      • parse<T>
      • parse2<T1, T2>
      • parse3<T1, T2, T3>
      • parse4<T1, T2, T3, T4>
      • parse5<T1, T2, T3, T4, T5>

      比较特殊的是,泛型需要按照如下规则:后一个泛型必须是前面泛型的泛型。如:

      T1 : List<Model<String>>
      T2 : Model<String>
      T3 : String
      

      用这样的方式解决泛型嵌套的问题。

      例子:

      var genericsModel1 = TestGenerics1<TestNonGenerics>("generics model 1", nonGenericsModel);
        var genericsModel1Parse = parse2<TestGenerics1<TestNonGenerics>, TestNonGenerics>(genericsModel1.toJson());
        print("$genericsModel1Parse, ${genericsModel1Parse.runtimeType}"); // -> TestGenerics1{msg: generics model 1, data: TestNonGenerics{msg: non generics}}, TestGenerics1<TestNonGenerics>
      
    • PartOf${className}<T>.parse()。本框架提供的另外一个将Map转换成模型的方法。

      var parseTest4 = PartOfJsonTest.parse(test.toJson());
      print("$parseTest4"); // -> JsonTest{msg: json test}
      
    • parse<T>()PartOf${className}<T>.parse()的差别:前者支持泛型嵌套,后者不支持。


0
likes
0
pub points
0%
popularity

Publisher

unverified uploader

json inflater metadata

Homepage

License

unknown (LICENSE)

Dependencies

cupertino_icons, flutter, json_annotation

More

Packages that depend on jsoninflater