Native<T>final

将外部声明与其本地实现绑定的注解。

只能应用于静态和顶级函数和变量的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变量,将尝试在以下顺序中解析(在)

  1. 提供的或默认的assetId
  2. 使用dart_api.h中的Dart_SetFfiNativeResolver设置的本地解析器,
  3. 当前进程。

这三个中的至少一个必须提供符号的绑定,否则方法调用或变量访问失败。

注意:这是一个实验性功能,未来可能会发生变化。

注解
  • @Since('2.19')

构造函数

Native({String? assetId, bool isLeaf = false, String? symbol})
const

属性

assetId String?
如果未使用默认值,则symbol解析的资源的ID。
final
hashCode int
此对象的哈希码。
no setterinherited
isLeaf bool
判断函数是否为叶函数。
final
runtimeType Type
表示对象运行时类型的表示。
no setterinherited
symbol String?
如果不使用默认值,则为要解析的本地符号。
final

方法

noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
toString() String
该对象的字符串表示形式。
继承

运算符

operator ==(Object other) bool
等于运算符。
继承

静态方法

addressOf<T extends NativeType>(Object native) Pointer<T>
native实现的本地地址。