美文网首页
2021-04-15 flutter实现自定义注解&注解生成代码

2021-04-15 flutter实现自定义注解&注解生成代码

作者: 我是小胡胡123 | 来源:发表于2021-04-15 21:29 被阅读0次

1, 定义注解.
2,定义生成器
3,定义builder
4,build入口配置
5,编写源文件.dart,使用我们自定义的注解
定义一个注解,注解的参数,会传递到给生成器
6,执行build命令,生成目标文件.g.dart

整体过程如下图:


image.png

1, 定义注解

second_annoation.dart

class SecondAnnoation {
  final String content;

  const SecondAnnoation(this.content);
}

2, 定义生成器

就是把注解带过来的参数,经过处理,返回新的代码文本

second_gennerator.dart

import 'package:demo/tools/resource/second_annoation.dart';
import 'package:source_gen/source_gen.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:build/build.dart';


class SecondGenerator extends GeneratorForAnnotation<SecondAnnoation> {
  @override
  generateForAnnotatedElement(
      Element element, ConstantReader annotation, BuildStep buildStep) {
    var content = annotation.peek('content').stringValue;

    String _codeContent = '\n\t\t\t\tstatic const $content = \'valueA ~~~\';';

    return 'class HelloClass{\n'
        '    HelloClass._();\n'
        '    $_codeContent\n'
        '}';
  }
}

3,定义builder

就是用来绑定的, build.yaml入口执行那个生成器,一一对应

builder.dart

import 'package:build/build.dart';
import 'package:demo/tools/resource/second_gennerator.dart';
import 'package:source_gen/source_gen.dart';

Builder mybuilder(BuilderOptions options) =>
    SharedPartBuilder([SecondGenerator()], "resource_metadata_other");

4,build入口配置

build.yaml

targets:
  $default:
    builders:
      demo|resource_metadata_other:
        enabled: true

builders:
  resource_metadata_other:
    import: "package:demo/tools/mybuilderplayground/builder.dart"
    builder_factories: [ "mybuilder"]
    build_extensions: {".dart": [".g.part"]}
    auto_apply: dependents
    build_to: cache
    applies_builders: ["source_gen|combining_builder"]

5,编写源文件.dart,使用我们自定义的注解

定义一个注解,注解的参数,会传递到给生成器

import 'package:demo/tools/resource/second_annoation.dart';

part 'second_from.g.dart';

@SecondAnnoation('helloworld')
class R {}

6,执行build命令,生成目标文件.g.dart

# 如果存在新文件需要更新,建议先执行清除命令:
flutter packages pub run build_runner clean
# 然后执行下列命令重新生成相应文件:
flutter packages pub run build_runner build --delete-conflicting-outputs
#flutter packages pub run build_runner watch

生成的.g.dart如下了

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'second_from.dart';

// **************************************************************************
// SecondGenerator
// **************************************************************************

class HelloClass {
  HelloClass._();

  static const helloworld = 'valueA ~~~';
}

相关文章

  • 2021-04-15 flutter实现自定义注解&注解生成代码

    1, 定义注解.2,定义生成器3,定义builder4,build入口配置5,编写源文件.dart,使用我们自定义...

  • 在Swagger中显示枚举值

    一、实现代码 1.1 自定义注解 1.2 Swagger配置拦截自定义注解 1.3 枚举类 重点:重写toStri...

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解

    理解注解 自定义注解实现aop

  • java基础之自定义注解

    注解Annotation实现原理与自定义注解例子

  • springboot通过注解注入bean

    1.自定义注解 2.配置类,生成bean 3.实现类 4.使用 在启动类加上注解。@EnableNoticeCli...

  • SpringBoot MySQL 多数据源配置

    通过自定义注解,AOP,AbstractRoutingDataSource 实现 定义 DataSource 注解...

  • flutter注解自动生成代码

    比如自动生成序列化json需要手动加入两个库。 在项目根目录执行clean: flutter packages p...

  • 注解篇

    摘要:自定义注解、自定义注解的使用、自定义注解的处理 **一、注解(也被称为元数据)为我们在代码中添加信息提供了一...

  • Spring Aop实战应用

    一 场景 记录操作日志 二 代码实现 1 切面类 2 配置监控的自定义注解 3 为要增加日志的方法添加自定义注解 ...

网友评论

      本文标题:2021-04-15 flutter实现自定义注解&注解生成代码

      本文链接:https://www.haomeiwen.com/subject/mopjlltx.html