如何在Dart中创建自己的元数据?

时间:2014-02-04 13:08:18

标签: annotations dart metadata

我想为我的dart codem创建一些自己的元数据,例如@table,@ column,但我找不到任何有用的文件。

但我确实发现angular.dart中有一些特殊的元数据(例如NgController):https://github.com/angular/angular.dart/blob/master/demo/todo/web/todo.dart#L52

如何在Dart中创建自己的元数据?有文件吗?

2 个答案:

答案 0 :(得分:15)

Dart支持用于将用户定义的注释附加到程序结构的元数据。

元数据由一系列注释组成,每个注释以字符@开头,后跟一个以标识符开头的常量表达式。如果表达式不是以下之一,则为编译时错误:

  1. 对编译时常量变量的引用。
  2. 对常量构造函数的调用。
  3. 元数据可以出现在库,部件标题,类,typedef,类型参数,构造函数,工厂,函数,字段,参数或变量声明之前以及导入,导出或部件指令之前。


    因此,您建议@table@column这些常量非常受功能限制,因为它们无法保存其他信息(参数)。

    @DataTable("sale_orders")
    class SaleOrder {
      @DataColumn("sale_order_date")
      DateTime date;
    }
    
    @table
    class Product {
      @column
      String name;
    }
    
    const DataColumn column = const DataColumn();
    
    const DataTable table = const DataTable();
    
    class DataTable {
      final String name;
    
      const DataTable([this.name]);
    }
    
    class DataColumn {
      final String name;
    
      const DataColumn([this.name]);
    }
    

    但无论如何,您选择最适合您需求的选项。

答案 1 :(得分:8)

  

元数据由一系列注释组成,每个注释以字符@开头,后跟一个以标识符开头的常量表达式。

因此,您可以使用带有const构造函数的类作为注释。