- Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)
- Flutter JsonToDart Mac版 lei了,真的不mark吗
- Flutter go-flutter desktop 填坑
- Flutter JsonToDart 工具
- JsonToDart,你已经是一个成熟的工具了
前言
JSON Schema 是一种用于描述和验证 JSON
文档结构的规范。它提供了一个强大的工具集,用于定义 JSON
数据的格式、类型和约束。
关键点:
-
定义了用于描述
JSON
文档结构的语法。 -
支持多种数据类型和约束,包括字符串、数字、布尔值、对象、数组等。
-
提供了验证机制,确保
JSON
数据符合预定义的结构和规则。
在实际开发中,很多时候,我们没法方便地直接获取到接口的 Json
,但是后端文档里面一般都会提供 JSON Schema。
JsonToDart
fluttercandies/json_to_dart_library: json_to_dart_library 该库已经支持解析 JSON Schema
,代码在后面。
Yapi API
YMFE/yapi: YApi 是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台
没有现成的,根据 api
实现了一套 dart
版本的
快速上手
安装依赖
bash
flutter pub add json_to_dart_library
如需配合 YApi 使用:
bash
flutter pub add yapi_api
基本用法
通过 JSON Schema 生成 Dart Model
假设你有如下 JSON Schema
:
json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"type": "object",
"properties": {
"id": { "type": "integer", "description": "用户ID" },
"name": { "type": "string", "description": "用户名" },
"email": { "type": "string", "description": "邮箱" }
},
"required": ["id", "name"]
}
你可以这样生成 Dart
代码:
dart
import 'package:json_to_dart_library/json_to_dart_library.dart';
void main() async {
DartObject? dartObject = await jsonToDartController.jsonToDartObject(
json: '''{
"\$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"type": "object",
"properties": {
"id": { "type": "integer", "description": "用户ID" },
"name": { "type": "string", "description": "用户名" },
"email": { "type": "string", "description": "邮箱" }
},
"required": ["id", "name"]
}''',
);
var errors = jsonToDartController.getErrors();
if (errors.isNotEmpty) {
print('Errors found:');
for (var error in errors) {
print(error);
}
return;
}
if (dartObject != null) {
var dartCode = jsonToDartController.generateDartCode(dartObject);
File('output.dart').writeAsStringSync(dartCode!);
print('Dart code generated successfully:');
}
}
结合 YApi
自动拉取接口 Schema
并生成 Dart Model
dart
import 'package:yapi_api/yapi_api.dart';
import 'package:json_to_dart_library/json_to_dart_library.dart';
void main() async {
YapiLoginResponse? loginResponse =
await apiHelper.login(email: '', password: '');
if (loginResponse != null && loginResponse.errcode == 0) {
print('login success');
} else {
print('login failed : ${loginResponse?.errmsg}');
return;
}
YapiInterfaceResponse? interfaceResponse = await apiHelper.getInterface(1);
if (interfaceResponse != null) {
print('interface : ${interfaceResponse.data?.title}');
} else {
print('get interface failed ');
}
YapiInterface? interfaceData = interfaceResponse?.data;
if(interfaceData?.resBodyIsJsonSchema == true){
final String? schema = interfaceData.resBody;
final DartObject? result = await jsonToDartController.jsonToDartObject(schema);
}
}
客户端使用
当然我们也提供了客户端
- web: Json To Dart
- windows / linux / macos: Releases · fluttercandies/JsonToDart
结语
最后感谢 龙哥/alex
帮忙弄的 action
,现在打包 web
和桌面端都一步到位。 需要的自提 release.yml。
爱 Flutter
,爱糖果
,欢迎加入Flutter Candies,一起生产可爱的Flutter小糖果
最最后放上 Flutter Candies 全家桶,真香。
