argument_must_be_a_constant
argument_must_be_a_constant
Dart 애널라이저가 생성하는 argument_must_be_a_constant 진단에 대한 설명이에요.
출처: 원문
본문
인자 {0}는 상수여야 해요.
설명
애널라이저는 Pointer.asFunction 또는 DynamicLibrary.lookupFunction 호출의 isLeaf 인자 값이 상수 표현식이 아닐 때 이 진단을 생성해요.
또한 애널라이저는 Pointer.fromFunction 또는 NativeCallable.isolateLocal 호출의 exceptionalReturn 인자 값이 상수 표현식이 아닐 때에도 이 진단을 생성해요.
FFI에 대한 더 자세한 내용은 dart:ffi를 사용한 C 연동 문서를 참고해요.
예시
아래 코드는 isLeaf 인자의 값이 매개변수이므로 상수가 아니기 때문에 이 진단을 만들어요.
import 'dart:ffi';
int Function(int) fromPointer(
Pointer<NativeFunction<Int8 Function(Int8)>> p,
bool isLeaf,
) {
return p.asFunction(isLeaf: isLeaf);
}
일반적인 수정 방법
사용할 수 있는 적절한 상수가 있다면 인자를 상수로 바꿔요.
import 'dart:ffi';
const isLeaf = false;
int Function(int) fromPointer(Pointer<NativeFunction<Int8 Function(Int8)>> p) {
return p.asFunction(isLeaf: isLeaf);
}
적절한 상수가 없다면 인자를 불리언 리터럴로 바꿔요.
import 'dart:ffi';
int Function(int) fromPointer(Pointer<NativeFunction<Int8 Function(Int8)>> p) {
return p.asFunction(isLeaf: true);
}
더 알아보기
FFI와 dart:ffi를 사용한 C 연동에 대한 더 자세한 내용은 관련 문서와 API 문서를 참고해요.