将外部声明与其本地实现绑定的注解。
只能应用于静态和顶级函数及变量的 external
声明。
带有 Native 注解的 external
函数由本地代码实现。该实现在指定的 assetId 指示的本地库中查找。类似地,带有 Native 注解的 external
变量通过从或向本地内存读取/写入来实现。
编译器和/或运行时提供从 assetId 到本地库的绑定,这取决于目标平台。编译器/运行时然后可以对本地库进行符号(标识符)解析/查找,以找到本地函数或本地全局变量,并将 Dart 中的 external
函数或变量声明绑定到该本地声明。默认情况下,运行时期望本地符号与 Dart 中注解的函数或变量具有相同的名称。这可以通过注解上的 symbol 参数来覆盖。
如果此注解用于函数,则 Native 注解的类型参数 T
必须是表示本地函数参数和返回类型的函数类型。参数和返回类型必须是 NativeType 的子类型。
如果此注解用于外部变量,则类型参数 T
必须是与本地类型兼容的本地类型。例如,一个 int 字段可以用 Int32 标注。如果省略 @Native
的类型参数,则默认为注解声明的 Dart 类型,而该类型必须是本地类型。这对于函数声明将不会起作用,但可以应用于类型是此库中的某些类型的变量,例如 Pointer。对于无法重新分配的本地全局变量,可以使用 Dart 中的 final 变量或 getter 来防止对本地字段的分配。
示例
@Native<Int64 Function(Int64, Int64)>()
external int sum(int a, int b);
@Native<Int64>()
external int aGlobalInt;
@Native()
external final Pointer<Char> aGlobalString;
调用 @Native
函数,以及读取或写入 @Native
变量,将尝试在以下顺序中解析(在)
- 提供的或默认的 assetId,
- 在
dart_api.h
中通过Dart_SetFfiNativeResolver
设置的本地解析器,以及 - 当前进程。
这三个中的至少一个必须为符号提供绑定,否则方法调用或变量访问会失败。
注意:这是一个实验性功能,将来可能会发生变化。
- 注解
-
- @Since('2.19')
构造函数
属性
方法
-
noSuchMethod(
Invocation invocation) → dynamic - 当访问不存在的方法或属性时调用。继承
-
toString(
) → String - 此对象的字符串表示形式。继承
操作符
-
operator ==(
Object other) → bool - 等于操作符。继承
静态方法
-
addressOf<
T extends NativeType> (Object native) → Pointer< T> - 实现
native
的本地地址。