must_be_a_subtype
型 '{0}' は '{2}' のために型 '{1}' のサブタイプである必要があります。
説明
#アナライザーは、次の2つのケースでこの診断を生成します。
Pointer.fromFunctionまたはNativeCallableコンストラクタの呼び出しで、型引数(明示的か推論されたかにかかわらず)が、メソッドの最初の引数として渡される関数の型のスーパタイプでない場合。DynamicLibrary.lookupFunctionの呼び出しで、最初の型引数が2番目の型引数のスーパタイプでない場合。
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);
}