Flutter-快速完成JsonModel的轉(zhuǎn)換

一、前言

因為在Flutter中禁用運行時反射,運行時反射會干擾Dart的tree shaking,由于反射會默認(rèn)使用所有代碼,因此tree shaking會很難工作;這些工具無法知道哪些widget在運行時未被使用,因此冗余代碼很難剝離。使用反射時,應(yīng)用尺寸無法輕松的進行優(yōu)化。

二、dart:convert

Flutter中基本的JSON序列化非常簡單。Flutter有一個內(nèi)置dart:convert庫,其中包含一個簡單的JSON編碼器和解碼器,但很難勝任我們開發(fā)中復(fù)雜的開發(fā)場景。

三、json_serializable package

要使用,需要在pubspec.yaml中添加對應(yīng)的依賴項


json_serializable_01.png

通過此鏈接可以查看這些所需依賴項的最新版本 。

在使用前,需要編寫服務(wù)端返回的Josn的對應(yīng)模型,展示一個列子。

import 'package:json_annotation/json_annotation.dart'; 

part 'cate_info.g.dart';


@JsonSerializable()
  class CateInfo extends Object {

  @JsonKey(name: 'cateId')
  int cateId;

  @JsonKey(name: 'orderIndex')
  int orderIndex;

  @JsonKey(name: 'cateTitle')
  String cateTitle;

  @JsonKey(name: 'cateStatus')
  int cateStatus;


  CateInfo(this.cateId,this.orderIndex,this.cateTitle,this.cateStatus,);

  factory CateInfo.fromJson(Map<String, dynamic> srcJson) => _$CateInfoFromJson(srcJson);

  Map<String, dynamic> toJson() => _$CateInfoToJson(this);

}

接下來,有兩種運行代碼生成器的方法:
一次性生成

flutter packages pub run build_runner build

在項目的根目錄下運行此命令,會進行一次構(gòu)建,生成對應(yīng)的解釋文件

持續(xù)生成

flutter packages pub run build_runner watch

在項目的根目錄下運行此命令,會啟動watcher,它會監(jiān)視我們項目中文件的變化,并在需要時自動構(gòu)建必要的解釋文件

四、 JSONConverter

上述還需要,手動編碼,非常浪費時間。

JSONConverter 是MAC上iOS開發(fā)的輔助小工具,可以快速的把json數(shù)據(jù)轉(zhuǎn)換生成對應(yīng)的模型類屬性,目前支持Objective-C、Swift、Flutter以及目前流行的Swift第三方庫: SwiftyJSONHandyJSON,ObjectMapper,可以靈活選擇構(gòu)建class/struct,并支持配置類名前綴等,省去手敲模型的麻煩,借此提高我們的開發(fā)效率。
另外還對mac os dark mode 進行了適配,增加版本更新提醒,緩存上次轉(zhuǎn)換配置緩存等實用功能。

Flutter 模型轉(zhuǎn)換.png

屏幕快照 2019-08-11 下午9.45.50.png

JSONConverter 托管倉庫:https://github.com/iosyaowei/JSONConverter歡迎各位大佬提各種建議和issue,如果喜歡給個star 鼓勵一波 哈哈哈哈O(∩_∩)O哈哈~。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容