JsonToDart 相关文章
- Flutter 功用最全的JsonToDart东西(桌面Web海陆空支撑)
- Flutter JsonToDart Mac版 lei了,真的不mark吗
- Flutter JsonToDart 东西
做Flutter快1年半了,从开始的便是干
到现在写代码也会留意标准,性能,注释,各种细节。一个好的东西能进步咱们的工作效率,
这次更新 JsonToDart首要是以下考虑:
- 之前开发的时分便是为了便利开发,快速生成daI a A : x x : ort代码,也没有太留意dart的代码标准。
- 之前的版别因为Flutter桌面的不完善,是经过go-flutter来终究生成产物的。Flutter sdk版别现已来到1.18,桌面功用进一步完善,是时分从头编译来一波了
- Github 在国内速度真& D ? ~ p实太慢,所以考虑安装包和网页版别移动到Gitee上面供咱们运用
下载安装
-
UWP 微软商铺 我这次放微软商铺了,Windows10的窗户小伙伴主张运用这个,假如更新也是主动的。
点击链接或者翻开微软商铺查找JsonToDart
。 -
WD i z x xPF for Windows 为Windows7,8 的窗户用+ 2 R % { : k户准备了WPF版别的安装包
-
UWP for Windows10 假如微软商铺大姨妈了,你能够直接在这儿下载安装包,安装办法能够查看之前的文章
-
Flutter for Macos Flutter一波带走全平台,~ # 4 [ m真香,为马克儿用户供给的app,直接拖到应用程序里边就好了
-
Flutter for Web 懒得安装?? 好. b W % _ Z嘛,这儿还有网页版别,不过主张仍是用I B P k } y B其他版别,js 无法区分doublei ! p 8 和 int的问题,假如必定要用,主张到时分敞开数据类型全方位维护,详细请看后边
运用
左面是json的输入框以及最后Dart生成的代码,右边是生成的} O |Json类的结构
格局化
点击格局化按钮,将json转换为右边可视化的jsoj k @ ` 3 {n类结构
更多设置
设置会悉数主动保存,Flutter版别除外,需求手动保存,我还没有发现应用退出的机遇,Flutter版别记住点击保存配置
,手动保存一下.
数据类型全方位维护
咱们必定会有被服务端坑的时分吧? 不按规则好了的数据类型传值,导致json整个解析失p j 8利。
翻开这个开关,就会在获取数据的时分加一层维护,代码如下
T asT<T>. . =;(dynamic value) {
if (h U v L & X q Uvalue is T) {
return value;
}
if (value != null) {
final String vaw M ]lueS = value.toString();
if (0 is T) {
return intS P x L ; c c S .tE / u Z K y K . ryParse(valueS) as T;
} else if (0.0 is T) {
return double.tryParse(valueS) as T;
} else if ('' is T) {
return valueS as T;
} else if (false is T) {
if (valueS =7 ~ d d y= '0' || valueS == '1') {
return (valueS == '1') as T;
}
return bool.fromEnvironment(value.toString()) as T;
}
}
return null;
}
数组全方位维护
在循环数组的时分,一个出错,导致json整个解析失利的情况,咱们遇到过吧?
翻开这个开关,将对每一次循环解析进行维护,代码如l _ 2 ~ m下
void tryCatch(Function f) {
try {
f?.call();
} catch (e, stF # 3 C L m v {ack) {
debj 3 v U _ 2ugPrint(7 W Z W D E _ g M"$e")7 ; s;
debugPrint("$stack");
}
}
遍历数组次数
在服务器回来的数据中,有时分数8 X ~ N u v组里边不是每一个item都带有悉数的特点,
假如只检查榜首个话,会存在特点丢失的情况
你能够经过屡次循环来避免丢失特点
选项有1,20,99
99就代表循环悉数进行检查
特点命名
Dart 命名标准
特点命名标准选项:
- 坚持N D G b原样
- 驼峰式命名小驼峰 josnToDart
- 帕斯卡命名大驼峰 JsonToDart
- 匈牙利命名下划线 json_to_dart
Dart 官方引荐 驼} r O – 2峰式命名小驼峰
特点排序
对特点进行排序
排序选项:
- 坚持原样
- 升序排列
- 降序排序V U .
增加维护办法
是否增加维护办法。数据类型全方位维护/数组全方位维护 这2个敞开的时分会生成办法。
榜首次运用的时分敞开就能够了,你能够办法提出去放一个dart文件X } 3 ^ ? ` V里边(而且在文a ) = ? 4 q件头中加入引证)。
后1 k K R边生成的时分就没必要再敞开了C W 1 d。
文件头部信V q m k P $ &息
能够在这儿增加copyrigh@ # – D + % – ( st,improt dart,创# | V – Z e l t U立人信息等等,支撑[Date yyyy MM-dd]来生成时刻,p D [ I q d = FDate后边为日期格局。
比如[Date yyyy MM-dd] 会将你生成Dart代码的时刻按照yyyy MM-dd的格局生成对应时刻
特点拜访器类型
点击格局化之后,右边会显现可视化的json类结构,在右? ( F E 8 [ N边一C D V 8 ; @ S列,便是特点拜访器类型设置
选项:
- 默许
- Final
- Get
- GetSet
顶部设置修正,Z D T b 6 !下面子项都会修正。你也能够独自对某个特点进行设置。
修正json类信息_ l 5
点击格局化之后,右边会显现可| 8 g z视化的json类结构。
榜首列为在json中对应的: ? j k 3 a r ` &key
第二列为特点类型/类的姓名。假如是类名,会用黄色布景提示
第三列是特点的姓名,输j j p v入选项假如为空,会报红提示
第四列是特点的拜访器类型
生成Dart
做好设置之后,点击生成D{ u } ]art按钮,左面就会生成你想要的Dart代码,而且提示“Dart生成成功,已仿制到剪切板”,能够直接仿制到你的Dart文件里边
举个栗子
比如说事V E |务中,Person
,有姓名年龄
import 'dart:convert';
import 'util.dart';
part 'personp E = 2 u z_part.dart| ] &';
class Person {
Person({
this.age,
this.name,
});
factory Person.fromJsZ w 3 S [ [ f Son(Map<7 ? p S t F 9String, dynamicd | Z ` z Y 6 V> jsonRes) =>
Person(age: asT<int>(jso. 2 e _ & enRes['a! 3 uge']), name: asT<String>(jsonRes['name']));
final int age;
final String nameY A U q;
Map<String, dynamic> toJson() => <String, dynamic>{
'age': age,
'name': name,
};
@override
String toString() {
return json.encode(this);
}
}
现在前端有事务逻辑,需求知道这个人是小孩子,– / ] = W M u年轻人仍是白叟。那么咱们应该怎样做?直接写这个类里边?
当然能够,
可是假如服务器今后变更这个数据模型` Z o ] { t,那么咱们用东西直接生成代码仿制,那咱们的事务代码是不是就会丢掉?
走运的是
dart 为咱们供给了扩展 extension
,你需求
- 设置dart sdk >=2.6
environment:y e @ [ F t r
sdk: '>=2.6.0 <3.0.0'
- Flutter项目根目录创立一个analysis_options.yay v { J U H ?ml文件,然后增加以下内T # N ] h $ i ? v容到文件中。
analyzer:
ev @ H W 5 |nable-experiment:
- extension-methods
然后你能够这样做。
part of 'person.dart';
enum AgeType {
baby,
youth,
old,
}
extension PersonE on Person {
AgeType get agea j 1 [ `Type {
if (age < 5) {
return AgeType.baby;
} else if (age < 50) {
return AgeType.youth;
}
return AgeType.old;
}
}
这样任你Person元数] l / ; {据模型修正的时分,本来写的事务逻辑也不会需求重写,只需求再次运行东西即可。
不足
- 关于一些需求修正特点的场景,用y 4 c
mixin
混入或者干脆把这个特点设0 V k置为可写,Q 8 . W r仍是无法脱节
mixin PersonMixin {
ib p + { 7nt curred X e ] )ntAge;
}
- 在解析json的时分根据不同情况解析不s . M H $ `同的数据模型,便是常常咱们问的,支不支, 7 s w撑泛型。。话说。这个服务端同一个接口,回来不同的数据类型模型,不知道是业界常态仍是。。
最惨便是这些代码写元数据模型里边了,下一次更新的时分只好手写。简单的模型还好,大的模型千把行,真的是醉了。
- 可惜的是dart并没有支撑
partial
将类进行拆分,不得不说仍是我软牛逼,C#牛逼。不知道dart什么时分会支撑。
打包的进程
整个打包时在FluttG % Eer 1.18,也记载一下进程。
Flutter for Windows] u / f _ X o s
-
在windows机器B x p M I d Z上面用vsci H L ( ]ode翻开项目,删掉windows目录,履行
flutter createk : F s .
将从头生成windows文件夹(曾经只能手动去官方仿制) -
Flutter也是与1 – X ) (时俱进啊,要求Visual Studio 2019
-
履行
flutter build windows
,履行结束之后将在buildR n y 3 s +/windows/下* b ~面找到打包出{ q z H来的exe
支撑仿制张贴全选这些快捷键了,q 7 { !go-flut r e G Eter能够不用了。唯@ = V m一的问题是我发现张贴的时分会在r 2 e ~前面加上一个乱码。
- 悄& C A m n ? ? X g悄说下,Flutter for UWP 应该快来~ W l % 0 h O K了,不要问为什么,反正我便是知道。
Fl4 J _ l % xut~ v C B [ter for Macos
-
在mac机器上面用vscode翻开项目,删掉macos目录,履行
flutter create .
将从头生成macV J x x l tos文件夹,mac是官方支撑最好的桌面端,无大问题。 -
履行
fluN # h R 3 % _ { ttter build macos
,履行结束之后将在build/macos/下6 T ? 1 F q U R i面I ! :找到打包出来的app -
这儿讲一下怎样修正app的图标和姓名
1.图标在这儿,用自J o b 2 ? p b己的图标替换掉
2.默许app姓名r ^ ;是Flutter,用xcode翻开runner.xcodeproj,在Build Settings
选项中查找product name
修正即可,
Flutter for Web
-
用vscode翻开项目,删掉web目录,履行
flutter cr( R } E w P 0 / ?eate .
将从头生成web文件T ; Q夹,留意我index.html里边有引证一个js,用来保存设置的 -
履3 % J # # B G行
flutter build web
,履行结束9 v * 6之后将在build/web/下面找到打包出来的文件
格局化Dart代码
之前一向没有做这个工作,便是生成的% 4 [ ) B 0 ]代码,我没有做格局化,我想的是你能够仿制到项目里边自己format。可是做,就要做的漂亮,完美。下面我分享下已知的几种格局化办法:
运用终端格局化DartV B F T U x P文件
这是做注解路由(
ff_annotation_route)的时分,低8 k . & + + P沉大佬pr的,终究调用终端履行flutter format xxx.dart
.
Future<void> formatFile(File file) async {
if (file == null) {
return;
}
if (!fij / + ` $ ^le.existsSync()) {
print(red.wrap('format error: ${fiK { D U k ^ Kle?.absolute?.path} doesn't existn'));
rF # h } EeturI a *n;
}
processRunSync(
executable: 'flutter',
arguments: 'format ${file?.absolute?.path}',
r& s )unInShell: true,
);
}
void processRunSync({
StringT 8 s , ` X B u executable,
Strij X E Qng arguments,
bool runInShell = false,
}) {
final ProcessResult result = Process.runSync(
executable,
arguments.split(' '),
runInShell: runInShell,
);
if (result.exitCode != 0) {
throw Exception(result.stdeg e - B q V * wrr);
}: 7 N / & / 5 h
print('${result.stdout}');
}
运用网络恳求格局化Dart文件
由于做UWP的时分无法调用终端,1 g = 8所以我在群里问了下有没有其他方式。公然大众是牛逼的,保洁大佬发现了一个用网络恳求做A H y !dart格局化的办法。他跑去抓DartPad,不亏是前端大佬。
恳求地址
- 国内
htt7 _ k x hps://dart-services.dartpad.( J K @cn/api/dartservices/v2/format
- 国外
https://dart-s} ] 1 s ) E L 0ervices.appspot.4 m z C P P wcom/api/dartservices/v2/format
- 运J H * t用post恳求json
{"source","dart代码"}
,回来{"newstring","格局化之后的dart代码"}
运用Darx W 0t StyleM R ]
在我写好UWP的dar4 h Q E jt 格局化的时分,保洁大佬又丢了一个链接,能够直9 L # b : 接用Dart Style来做format。
2行代码,太简单8 D W M了!有一群小伙伴真好。。
final DartFormatter formatter = DartFoy E m F n s @rmatter();
rJ u / 0 6 R 4esult = formQ B ( watter.format(resul6 ) L @ 5 c M d Pt);
Github 太慢
最近运用github真实是太慢了,其实低沉大佬很早就告诉我一个办法,便是把Github的库同步到gitee上面,然后再从gitee上面下载,我一向懒没有尝试,最近真实受不了,试了一下,真香!
-
从github clone flutter库房
-
从gitee clone flutter库房
-
注册,直接用github账号登录就好了
-
新建一个库~ / p X房
-
拖动到最下面,导入已有库房
-
输入github的库房地址,比如这儿是flutter
- 等候一分钟(很快),库房创立结束
- clone到本地即可
- 同步github的库房,库房姓名右边有一个刷新按z B q钮,能够把github的库房同步过来
- 本地修正代码更新到github
终端中输入 git remote add github https://github.com/flutter/flutter
修正代码commit之后输入 git push github
, 完美!
- 今后遇到难以下载的github库房必定记住用这个办法,大大进步效率。
结语
要不是因为想偷懒,人类就不会创造东西。不是因为制作东西,也不会在这个进程中学习到更多。欢迎加入Flutter CandiX 5 Zes成为东西人。 (QQ群:181398081)
最最后放上5 v U Z c z ^ AFl; F R +utter Candies全家桶,真香。