メインコンテンツにスキップ

must_be_a_subtype

型 '{0}' は '{2}' のために型 '{1}' のサブタイプである必要があります。

説明

#

アナライザーは、次の2つのケースでこの診断を生成します。

  • Pointer.fromFunction または NativeCallable コンストラクタの呼び出しで、型引数(明示的か推論されたかにかかわらず)が、メソッドの最初の引数として渡される関数の型のスーパタイプでない場合。
  • DynamicLibrary.lookupFunction の呼び出しで、最初の型引数が2番目の型引数のスーパタイプでない場合。

FFI の詳細については、dart:ffi を使用した C の相互運用 を参照してください。

#

以下のコードは、関数 f の型(String Function(int))が型引数 TInt8 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);
}