flutter里对json解析和根据泛型进行自动实例化

3,595 阅读2分钟

FlutterJsonBeanFactory是用来生成dart的json实体类和根据配置生成factory的idea全家桶的插件.

##注意:

如果显示“No classes that inherit JsonConvert were found”,则删除项目下的".idea"文件,然后点击你的(Andorid Studio或Idea)中的“invalidate Caches”重新启动IDE

对比其他插件优势

①:可以自定义后台返回值

使用注解@JSONField image.png 其中name: "list"的list就是后台返回字段名称,deserialize(默认true)是否参与fromJson解析,serialize(默认true)是否参与tojson,(新版本format已移除)

②:可以解析完整字段json

比如包含如下json image.png 可以解析出来list中map的所有字段,并且每个list的map字段不同或者为null问题有会做出处理 image.png

③可以自动生成.g.dart文件,后期修改or添加entity中的字段,只需一个快捷键(alt+j)就可以重新生成文件,并且会删除多余文件.

image.png .g.dart文件内容 image.png ##④ 自动生成JsonConvert方便配合网络请求封装进行泛型处理 直接传递上面生成的entity就可以自动根据map解析出对应实例,并自动赋值 image.png ##⑤ 使用gif图 beantojson_factory.gif ##⑥ 如果你想自定义怎么解析,可以在main方法里继承JsonConvert重写方法

import 'generated/json/base/json_convert_content.dart';

class MyJsonConvert extends JsonConvert {
  T? asT<T extends Object?>(dynamic value) {
    try {
      String type = T.toString();
      if (type == "DateTime") {
        return DateFormat("dd.MM.yyyy").parse(value) as T;
      }else{
        return super.asT<T>(value);
      }
    } catch (e, stackTrace) {
      print('asT<$T> $e $stackTrace');
      return null;
    }
  }
}

Future<void> main() async {
  jsonConvert = MyJsonConvert();
  runApp(Text("OK"));
}

##⑦ 目前不支持多维数组,如果有,请使用var或者dynamic修饰

网络请求实例 image.png dio请求部分 image.png ##⑧ 如果你遇到提示"No classes that inherit JsonConvert were found", 此时需要删除项目下”.idea”的目录,然后点击你的(andorid studio或者idea)里”invalidate caches”按钮,重启ide

安装插件

7BDB7CCB-708F-4EFD-8BEF-00ED55BA0AA8.png

安装完后重启ide,会发现tools里多了FlutterJsonBeanFactory一个选项

image.png

在对应目录右键new,会有个dart bean class file from json,点击这个选项

image.png

在flutter项目的yaml文件里修改

之前:

environment:
  sdk: ">=2.12.0 <3.0.0"

修改成:

environment:
  sdk: ">=2.15.0 <3.0.0"

弹出一个输入类名和和json串的弹框,例:填入类型abc和json串

04F2D0C3-F815-4A24-B949-8E0E9D400031.png

点击make按钮会生成a_b_c_entity.dart文件

88E5E9B4-17F8-4973-B172-53CB1398AEC0.png 这些操作完成后自动生成如下文件 A5E6FF53-59EE-474C-B3FA-D87665C7191D.png @JSONField作用在Field时,其name不仅定义了输入key的名称,为了防止后台返回数据不规范,但是flutter端需要按照驼峰命名 a_b_c_entity_helper.dart类提供了eitity类的tojson和fromjson代理方法 json_convert_content.dart提供了json_convert_content.dart.fromJsonAsT方法 根据泛型来解析json成对象

引用群里老哥封装retrofit的泛型基类 [图片] 注意:针对同一个项目里包含module里(原生集成flutter也是同理)也想用这个插件生成,那么要为modul单独打开一个窗口,此插件只针对当前项目根目录下的lib目录服务

image.png

打扰:我想在北京找份flutter开发的工作,请问有没有大佬可以帮忙推荐一下,谢谢了,我的邮箱:157418979@qq.com

下一篇(网络类使用)地址,觉得有用,可以给点个喜欢