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 문서를 참고해요.