将外部声明与其本地实现绑定的注解。
只能应用于静态和顶级函数和变量的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
实现的本地地址。