跳到主要內容

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;
}