跳过主内容

non_constant_type_argument

'{0}' 的类型参数必须在编译时已知,因此它们不能是类型参数。

描述

#

当方法的类型参数需要在编译时已知,但使用了在编译时无法确定值的类型参数作为类型参数时,分析器会产生此诊断。

有关 FFI 的更多信息,请参阅 使用 dart:ffi 的 C 互操作

示例

#

以下代码会产生此诊断,因为 Pointer.asFunction 的类型参数必须在编译时已知,但使用了在编译时未知的类型参数 R 作为类型参数

dart
import 'dart:ffi';

typedef T = int Function(int);

class C<R extends T> {
  void m(Pointer<NativeFunction<T>> p) {
    p.asFunction<R>();
  }
}

常见修复

#

移除任何类型参数的使用

dart
import 'dart:ffi';

class C {
  void m(Pointer<NativeFunction<Int64 Function(Int64)>> p) {
    p.asFunction<int Function(int)>();
  }
}