跳到主要內容

must_be_a_subtype

型別 '{0}' 必須是 '{1}' 的子型別,對於 '{2}'。

描述

#

分析器在以下兩種情況下會產生此診斷:

  • 在呼叫 Pointer.fromFunctionNativeCallable 建構函式時,如果型別引數(無論是顯式還是推斷的)不是傳遞給方法的第一個引數的函式的型別的超型別。
  • 在呼叫 DynamicLibrary.lookupFunction 時,如果第一個型別引數不是第二個型別引數的超型別。

有關 FFI 的更多資訊,請參閱使用 dart:ffi 的 C 互操作

示例

#

以下程式碼會產生此診斷,因為函式 f 的型別 (String Function(int)) 不是型別引數 T (Int8 Function(Int8)) 的子型別。

dart
import 'dart:ffi';

typedef T = Int8 Function(Int8);

double f(double i) => i;

void g() {
  Pointer.fromFunction<T>(f, 5.0);
}

常見修復方法

#

如果函式正確,則更改型別引數以匹配函式。

dart
import 'dart:ffi';

typedef T = Float Function(Float);

double f(double i) => i;

void g() {
  Pointer.fromFunction<T>(f, 5.0);
}

如果型別引數正確,則更改函式以匹配型別引數。

dart
import 'dart:ffi';

typedef T = Int8 Function(Int8);

int f(int i) => i;

void g() {
  Pointer.fromFunction<T>(f, 5);
}