跳到主要内容

native_field_not_static

原生字段必须是静态的。

描述

#

当类的实例字段使用 @Native 注解时,分析器会产生此诊断信息。原生字段指向 C、C++ 或其他原生语言中的全局变量,而 Dart 中的实例字段则特定于类的实例。因此,原生字段必须是静态的。

有关 FFI 的更多信息,请参阅使用 dart:ffi 进行 C 语言互操作

示例

#

以下代码会产生此诊断信息,因为类 C 中的字段 f 使用了 @Native 注解,但不是 static

dart
import 'dart:ffi';

class C {
  @Native<Int>()
  external int f;
}

常见修复方法

#

可以将字段设为静态

dart
import 'dart:ffi';

class C {
  @Native<Int>()
  external static int f;
}

或者将其移出类外部,这种情况下不需要显式的 static 修饰符

dart
import 'dart:ffi';

class C {
}

@Native<Int>()
external int f;

如果你是想注解一个属于结构体一部分的实例字段,请省略 @Native 注解

dart
import 'dart:ffi';

final class C extends Struct {
  @Int()
  external int f;
}