跳过导航
跳过mega-menu
颤振宏告别样板|远见移动

欢迎来到Flutter开发的未来! 想象一下这样一个世界:编写样板代码的乏味任务已经成为过去. 向…问好 飞镖宏 -你提高生产力的新秘密武器. 这些强大的运行时代码生成工具在幕后发挥着它们的魔力, 无缝地减少了样板文件,消除了对繁琐的辅助工具的需求. 使用颤振宏, 你可以专注于制作美丽, 高性能的应用程序,而宏处理重复的任务, 使您的开发过程比以往任何时候都更快、更有效. 准备解锁一个新的水平的编码自由和效率与Flutter宏!

那么,什么 宏?

Dart宏是一个可自定义的代码片段,它接受其他代码作为输入,并对其进行处理 实时 创建、修改或添加新元素. 宏提供了一种可重用的方式来处理重复的任务和模式, 特别是在处理需要迭代类的字段时. 现在有一个宏可以使用:jsonencoable. 顾名思义, JsonEncodable 产生乏味 fromJsontoJson 适合你的方法.

宏不需要任何额外的东西来运行, 只需向代码中添加所需的适当注释,并在实时生成样板代码时进行观察! 对他们来说,代码就是 写入磁盘,所以说再见的部分关键字. 宏直接 增加 现有类.

他们正在解决什么问题

宏,作为 静态的元编程 工具,提供运行时代码生成解决方案的替代方案(例如 build_runner, json_serializable). 宏消除了对辅助工具的需求, 被集成到Dart语言中, 通过Dart工具在后台自动执行您键盘上的每一个按键

  • 没有额外的步骤: 宏在您编写代码时实时构建代码.
  • 没有性能影响: 所有的代码生成都直接在编译器中进行.
  • 干净整洁的: 没有多余的文件打乱你的项目.
  • 清除错误信息: 自定义诊断出现在您的IDE中,就像常规编译器消息一样.

例子

让我们比较3个不同的代码片段, 首先没有任何代码生成, 第二个是freeze,第三个是宏

无代码生成

图片标题

对于这样一个通用的样板来说,仅仅是将这部分输入出来所花费的时间就比应该花费的时间长得多. 很明显这还不是整个课程,它还缺 hashCode, == 操作员和可能的 toString 覆盖, 然后对每个(或至少大多数)模型类执行此操作, 结果是你花了很多时间在很容易出错的样板代码上.

现在让我们看看 冻结

这看起来比手工编写函数更不容易出错, 但现在有两个新文件需要处理, 推到项目github或设置 .gitignore. 比手工书写省力多了, 但是这些文件中仍然有一些部分可以被视为样板文件.

现在让我们用宏检查一下

就是这样! 不需要其他代码就可以完成这项工作. 在键入最后一个分号时,代码已经生成并准备使用. 写完这个类后,我们可以转到其他文件,并能够做这样的事情:

宏帮助您专注于重要的内容(产品的核心逻辑),并将您从耗时的工作中解放出来, 无聊的任务是必要的,但经常阻碍.

这是实验性的,怎么去尝试

搭建环境:

  1. 切换到Dart开发通道或颤振主通道
  2. 运行飞镖 -version以确保您有飞镖版本' 3.5.0-152′或更晚
  3. 编辑pubspec中的SDK约束以要求Dart版本:SDK: ^3.5.0-152.
  4. 将json包添加到dependencies: 飞镖 pub Add json.
  5. 在包的analysis_options中启用这个实验.yaml文件. 项目根目录下的文件:

  1. 将包导入到您计划使用的文件中 导入的包:json / json.飞镖”;
  1. 运行带有实验标志的项目 运行——enable-experiment=宏 bin/my_app.飞镖

如何创建自定义宏的示例

您的第一个自定义宏应该有两个关键段,即 关键字和一个接口,该接口确定为哪个接口确定宏. 您可以找到现有接口的列表 在这里.

例如, 适用于枚举的宏, 并向枚举中添加新的声明, 将实现EnumDefinitionMacro接口:

创建了自定义宏后,可以将其添加到声明中,如下所示:

要记住的重要事情是,在高级别的宏使用构建器方法来组合声明的属性 标识符 在这些属性上,通过对代码库的自省收集

稳定发布时间表

在撰写本文时,还不知道将宏发布到stable中. 具体的日期还没有确定,因为宏是通过深度自省应用它们的代码库来工作的. jsonencoable宏发布的总体目标预计将在2024年底之前发布, 并且稳定发布了完整的功能, 包括创建自定义宏, 2025年早期到中期.

常见问题解答

什么是加法?

通过“增强”关键字的增强是下一步的进化 部分 关键字和部件文件,只是没有额外的语法,使您的类不那么干净. 增强允许在主类文件之外定义类函数.

例如,我们有这个主类 :

现在有了基类集, 我们可以在项目的不同部分创建自己的json序列化方法, 是这样的:

在添加了下面的导入之后,就可以开始了!

为什么从build_runner/ frozen迁移到宏? 

当然是为了改善开发人员的体验! 这些包裹没有问题, 他们完美地完成了这项工作, 但是使用宏时,我们通过删除 _$ 上面提到的包所需的语法, 同时也减少了开发人员管理被忽略的文件的工作量,或者在同行评审中无休止地滚动生成的文件,以获得拉取请求的关键.

澳门十大正规赌博娱乐平台

在这里注册