一、前言
因為在Flutter中禁用運行時反射,運行時反射會干擾Dart的tree shaking,由于反射會默認使用所有代碼,因此tree shaking會很難工作;這些工具無法知道哪些widget在運行時未被使用,因此冗余代碼很難剝離。使用反射時,應用尺寸無法輕松的進行優化。
二、dart:convert
Flutter中基本的JSON序列化非常簡單。Flutter有一個內置dart:convert庫,其中包含一個簡單的JSON編碼器和解碼器,但很難勝任我們開發中復雜的開發場景。
三、json_serializable package
要使用,需要在pubspec.yaml中添加對應的依賴項
通過此鏈接可以查看這些所需依賴項的最新版本 。
在使用前,需要編寫服務端返回的Josn的對應模型,展示一個列子。
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
在項目的根目錄下運行此命令,會進行一次構建,生成對應的解釋文件
持續生成
flutter packages pub run build_runner watch
在項目的根目錄下運行此命令,會啟動watcher,它會監視我們項目中文件的變化,并在需要時自動構建必要的解釋文件
四、 JSONConverter
上述還需要,手動編碼,非常浪費時間。
JSONConverter 是MAC上iOS開發的輔助小工具,可以快速的把json數據轉換生成對應的模型類屬性,目前支持Objective-C、Swift、Flutter以及目前流行的Swift第三方庫: SwiftyJSON、HandyJSON,ObjectMapper,可以靈活選擇構建class/struct,并支持配置類名前綴等,省去手敲模型的麻煩,借此提高我們的開發效率。
另外還對mac os dark mode 進行了適配,增加版本更新提醒,緩存上次轉換配置緩存等實用功能。
JSONConverter 托管倉庫:https://github.com/iosyaowei/JSONConverter歡迎各位大佬提各種建議和issue,如果喜歡給個star 鼓勵一波 哈哈哈哈O(∩_∩)O哈哈~。