must_be_a_subtype
型別 '{0}' 必須是 '{1}' 的子型別,對於 '{2}'。
描述
#分析器在以下兩種情況下會產生此診斷:
- 在呼叫
Pointer.fromFunction或NativeCallable建構函式時,如果型別引數(無論是顯式還是推斷的)不是傳遞給方法的第一個引數的函式的型別的超型別。 - 在呼叫
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);
}