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