JsonToDart 相关文章

  • Flutter 功用最全的JsonToDart东西(桌面Web海陆空支撑)
  • Flutter JsonToDart Mac版 lei了,真的不mark吗
  • Flutter JsonToDart 东西

做Flutter快1年半了,从开始的便是干

Flutter JsonToDart 工具

到现在写代码也会留意标准,性能,注释,各种细节。一个好的东西能进步咱们的工作效率,

这次更新 JsonToDart首要是以下考虑:

  • 之前开发的时分便是为了便利开发,快速生成daI a A : x x : ort代码,也没有太留意dart的代码标准。
  • 之前的版别因为Flutter桌面的不完善,是经过go-flutter来终究生成产物的。Flutter sdk版别现已来到1.18,桌面功用进一步完善,是时分从头编译来一波了
  • Github 在国内速度真& D ? ~ p实太慢,所以考虑安装包和网页版别移动到Gitee上面供咱们运用

下载安装

  • UWP 微软商铺 我这次放微软商铺了,Windows10的窗户小伙伴主张运用这个,假如更新也是主动的。
    点击链接或者翻开微软商铺查找JsonToDart

    Flutter 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的问题,假如必定要用,主张到时分敞开数据类型全方位维护,详细请看后边

运用

Flutter JsonToDart 工具

左面是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列,便是特点拜访器类型设置

Flutter JsonToDart 工具

选项:

  • 默许
  • Final
  • Get
  • GetSet

顶部设置修正,Z D T b 6 !下面子项都会修正。你也能够独自对某个特点进行设置。

修正json类信息_ l 5

Flutter JsonToDart 工具

点击格局化之后,右边会显现可| 8 g z视化的json类结构。

榜首列为在json中对应的: ? j k 3 a r ` &key

第二列为特点类型/类的姓名。假如是类名,会用黄色布景提示

第三列是特点的姓名,输j j p v入选项假如为空,会报红提示

第四列是特点的拜访器类型

生成Dart

做好设置之后,点击生成D{ u } ]art按钮,左面就会生成你想要的Dart代码,而且提示“Dart生成成功,已仿制到剪切板”,能够直接仿制到你的Dart文件里边

举个栗子

Flutter JsonToDart 工具

比如说事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 cmixin混入或者干脆把这个特点设0 V k置为可写,Q 8 . W r仍是无法脱节
mixin PersonMixin  {
ib p + { 7nt curred X e ] )ntAge;
}
  • 在解析json的时分根据不同情况解析不s . M H $ `同的数据模型,便是常常咱们问的,支不支, 7 s w撑泛型。。话说。这个服务端同一个接口,回来不同的数据类型模型,不知道是业界常态仍是。。
    Flutter JsonToDart 工具

最惨便是这些代码写元数据模型里边了,下一次更新的时分只好手写。简单的模型还好,大的模型千把行,真的是醉了。

Flutter JsonToDart 工具
  • 可惜的是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 JsonToDart 工具
  • 履行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 iI ! :找到打包出来的app

  • 这儿讲一下怎样修正app的图标和姓名
    1.图标在这儿,用自J o b 2 ? p b己的图标替换掉

    Flutter JsonToDart 工具

2.默许app姓名r ^ ;是Flutter,用xcode翻开runner.xcodeproj,在Build Settings选项中查找product name修正即可,

Flutter JsonToDart 工具

Flutter for Web

  • 用vscode翻开项目,删掉web目录,履行flutter cr( R } E w P 0 / ?eate . 将从头生成web文件T ; Q夹,留意我index.html里边有引证一个js,用来保存设置的

  • 3 % J # # B Gflutter 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库房

    Flutter JsonToDart 工具
  • 从gitee clone flutter库房

    Flutter JsonToDart 工具
  • 注册,直接用github账号登录就好了

    Flutter JsonToDart 工具
  • 新建一个库~ / p X

Flutter JsonToDart 工具
  • 拖动到最下面,导入已有库房

    Flutter JsonToDart 工具
  • 输入github的库房地址,比如这儿是flutter

Flutter JsonToDart 工具
  • 等候一分钟(很快),库房创立结束
Flutter JsonToDart 工具
  • clone到本地即可
Flutter JsonToDart 工具
  • 同步github的库房,库房姓名右边有一个刷新按z B q钮,能够把github的库房同步过来
Flutter JsonToDart 工具
  • 本地修正代码更新到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全家桶,真香。

Flutter JsonToDart 工具