跳到主要内容

argument_must_be_a_constant

参数“{0}”必须是一个常量。

描述

#

当调用 Pointer.asFunctionDynamicLibrary.lookupFunction 时,如果其 isLeaf 参数的值不是常量表达式,分析器会产生此诊断信息。

当调用 Pointer.fromFunctionNativeCallable.isolateLocal 时,如果其 exceptionalReturn 参数的值不是常量表达式,分析器也会产生此诊断信息。

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

示例

#

以下代码会产生此诊断信息,因为 isLeaf 参数的值是一个形参,因此不是常量

dart
import 'dart:ffi';

int Function(int) fromPointer(
    Pointer<NativeFunction<Int8 Function(Int8)>> p, bool isLeaf) {
  return p.asFunction(isLeaf: isLeaf);
}

常见修复方法

#

如果存在可用的合适常量,请将参数替换为该常量

dart
import 'dart:ffi';

const isLeaf = false;

int Function(int) fromPointer(Pointer<NativeFunction<Int8 Function(Int8)>> p) {
  return p.asFunction(isLeaf: isLeaf);
}

如果不存在合适的常量,请将参数替换为布尔值字面量

dart
import 'dart:ffi';

int Function(int) fromPointer(Pointer<NativeFunction<Int8 Function(Int8)>> p) {
  return p.asFunction(isLeaf: true);
}