Flutter Dart Macro 宏简化 JSON 序列化

Flutter Dart Macro 宏简化 JSON 序列化

视频

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

macro 宏

好处

  • 直接语言集成。由于宏直接内置于语言中,它们比外部库提供更多的一致性并兼容语言的本机功能。
  • 减少外部依赖。通过使用宏来减少对外部库的依赖,您可以减小应用程序的大小并简化依赖管理。
  • 编译时代码生成。与运行时生成代码的解决方案相比,宏在编译时生成代码可能会提供更快的结果。
  • 增强定制化和自由度。开发者可以借助宏更好地根据项目独特需求定制代码生成,提供大量的定制自由度。

json_serializable 比较

为了在 Dart 中生成 JSON 序列化代码,这个库经常被使用,但它需要更多的依赖和设置。无需额外的工具,宏可以在源代码中自动生成 fromJson 和 toJson 方法。

freezed 比较

使用这个库,创建类型安全、不可变的 Dart 类变得非常简单。虽然 freezed 功能强大,但宏可能以更少的依赖和更直接的集成来完成类似的任务。

实现步骤

第一步:切到 dart 3.5 版本

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

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';

import 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值