Flutter 插件

209 阅读2分钟

FlutterJsonBeanFactory

使用该插件可以快速的实现Json转实体类,很多代码都会由系统自动生。

image.png

  • models 为项目自建目录,即右键选择创建实体类的目录,生成的实体类存放在该目录;

  • generated/json 为插件生成目录,其中 xxx_entity.g.dart 根据实体类生成的类辅助方法,.g.dart 为后缀。主要包含 \$XxxFromJson\$XxxToJson 两个方法,以 $ +实体类名 为前缀。base 目录下为基础公共代码。

  • 生成实体类后如果要对实体字段进行修改,比如增加字段或者修改字段类型、名称等,修改完以后后使用 Alt + J 即可重新生成对应的代码。

JSONField

使用JSONField 后一定要 Alt + J 重新生成代码。

  1. 自定义字段名
    //Json 里的字段为 `AGE` 需要映射到实体类的 `age` 字段
    
    String? id;
    String? name;
    @JSONField(name: "AGE")
    int? age;
   

2.忽略字段 serialize 、 deserialize 用于序列化和反序列化时忽略某个字段。

如果不需要解析 name 字段则可设置 deserialize 为 false

如果 toJson 时不需要序列化某个字段,则设置 serialize 为 false。

@JSONField(deserialize: false)
String? name;
//------
String userData = """
    {
      "id":"12313",
      "name":"loongwind",
      "AGE":18
    }
    """;

UserEntity user = UserEntity.fromJson(jsonDecode(userData));
print(user.name); // null


@JSONField(serialize: false)
String? name;
//------
UserEntity user = UserEntity();
user.id = "123";
user.name = "loongwind";
user.age = 18;

print(user.toJson()); // {id: 123, AGE: 18}

单实体一解析


String userData = """
 {
    "id":"12313",
    "name":"loongwind",
    "age":18
 }
""";

UserEntity user = UserEntity.fromJson(jsonDecode(userData));

或
UserEntity? user = jsonConvert.convert<UserEntity>(jsonDecode(userData)); 

或
UserEntity? user = jsonConvert.asT<UserEntity>(jsonDecode(userData));

或
UserEntity? user = JsonConvert.fromJsonAsT<UserEntity>(jsonDecode(userData)


//fromJson 需要的参数是 Map ,所以需要先使用 jsonDecode 将 Json 字符串转换为 Map

List 解析

String userData = """
 [
    {
      "id":"12313",
      "name":"loongwind",
      "age":18
    },
    {
      "id":"22222",
      "name":"cmad",
      "age":25
    }
 ]
""";

// 泛型为为对应 List 的类型
List<UserEntity>? users = jsonConvert.convert<List<UserEntity>>(jsonDecode(userData));

List<UserEntity>? users = jsonConvert.asT<List<UserEntity>>(jsonDecode(userData));

List<UserEntity>? users = JsonConvert.fromJsonAsT<List<UserEntity>>(jsonDecode(userData));


//泛型为 List Item元素的泛型类型,
List<UserEntity?>? users = jsonConvert.convertList<UserEntity>(jsonDecode(userData));

List<UserEntity>? users = jsonConvert.convertListNotNull<UserEntity>(jsonDecode(userData));