https://youtu.be/gBZYjBmoOcU
https://www.bilibili.com/video/BV1tT421a7ev/
原文 https://ducafecat.com/blog/using-dart-macros-to-simplify-json-serialization
今天我们将会体验 dart 语言新特性 macro 宏,来实现对 json 的序列化,用到的包是官方实验室写的 json 包。
本文将会一步步的带你实现这个功能,那我们开始吧。
Dart, 宏, JSON 序列化, 代码生成, 效率优化, 语言特性
https://dart.dev/language/macros#view-the-generated-code
https://github.com/dart-lang/language/blob/main/working/macros/feature-specification.md
https://pub.dev/packages/json
为了在 Dart 中生成 JSON 序列化代码,这个库经常被使用,但它需要更多的依赖和设置。无需额外的工具,宏可以在源代码中自动生成 fromJson 和 toJson 方法。
使用这个库,创建类型安全、不可变的 Dart 类变得非常简单。虽然 freezed 功能强大,但宏可能以更少的依赖和更直接的集成来完成类似的任务。
https://docs.flutter.dev/release/archive?tab=macos
下载 beta channel , dart 3.5 版本。
我本机用的 fvm 管理多版本。
检查环境
❯ flutter --version
Flutter 3.23.0-0.1.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 2feea7a407 (13 天前) • 2024-06-06 10:19:10 +0700
Engine • revision bb10c54666
Tools • Dart 3.5.0 (build 3.5.0-180.3.beta) • DevTools 2.36.0
pubspec.yaml
environment:
sdk: ">=3.5.0-180.3.beta <4.0.0"
dependencies:
json: ^0.20.2
官方实验室 json 包
https://pub.dev/packages/json
analysis_options.yaml
analyzer:
enable-experiment:
- macros
在编写代码时,除非你告诉分析器你正在试验此功能,否则它会发出警告。
编写官方示例代码
lib/macros/user.dart
import 'package:json/json.dart';
() // Macro annotation.
class User {
final int? age;
final String name;
final String username;
}
可以点击 Go to Augmentation
查看详细
augment library 'package:flutter_application_macro/macros/user.dart';