void를 반환해야 합니다
void를 반환해야 합니다
The return type of the function passed to 'NativeCallable.listener' must be 'void' rather than '{0}'.
이 진단은 NativeCallable.listener 생성자에 void를 반환하지 않는 함수를 넘길 때 나타나요. listener는 호출 결과를 돌려줄 수 없기 때문에 함수는 void를 반환해야 해요.
출처: must_return_void
본문
이 애널라이저 진단은 void를 반환하지 않는 함수를 NativeCallable.listener 생성자에 넘길 때 발생해요.
NativeCallable.listener는 어떤 스레드에서든 호출될 수 있는 네이티브 콜러블을 만들어요. 이 콜러블을 호출하는 네이티브 코드는 콜러블을 만든 isolate로 메시지를 보내고, 응답을 기다리지 않아요. 그래서 콜러블에서 결과를 반환하는 건 불가능해요.
FFI에 대한 자세한 내용은 C interop using dart:ffi 문서를 참고하면 좋아요.
예시
다음 코드는 함수 f가 void가 아니라 int를 반환하기 때문에 이 진단이 나와요.
import 'dart:ffi';
int f(int i) => i * 2;
void g() {
NativeCallable<Int32 Function(Int32)>.listener(f);
}
일반적인 해결 방법
함수의 반환 타입을 void로 바꾸면 돼요.
import 'dart:ffi';
void f(int i) => print(i * 2);
void g() {
NativeCallable<Void Function(Int32)>.listener(f);
}