У меня есть пример для работы. Надеюсь, вы можете адаптировать это к вашему случаю.
Пример C функция
EXTERNC int32_t foo(
int32_t bar,
int32_t (*callback)(void*, int32_t)
) {
return callback(nullptr, bar);
}
код дротика
Первый typedefs
. Нам нужны две для нативной функции foo
и одна для обратного вызова Dart.
typedef example_foo = Int32 Function(
Int32 bar, Pointer<NativeFunction<example_callback>>);
typedef ExampleFoo = int Function(
int bar, Pointer<NativeFunction<example_callback>>);
typedef example_callback = Int32 Function(Pointer<Void>, Int32);
и код для обратного вызова
static int callback(Pointer<Void> ptr, int i) {
print('in callback i=$i');
return i + 1;
}
и поиска
ExampleFoo nativeFoo =
nativeLib.lookup<NativeFunction<example_foo>>('foo').asFunction();
и, наконец, используйте его так:
int foo(int i) {
return nativeFoo(
i,
Pointer.fromFunction<example_callback>(callback, except),
);
}
, как и ожидалось, foo(123)
печатает flutter: in callback i=123
и возвращает 124