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 문서를 참고하면 좋아요.

예시

다음 코드는 함수 fvoid가 아니라 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);
}

더 알아보기