navigine_sdk_flutter_ModelProvider_ToFfi function

Pointer<Void> navigine_sdk_flutter_ModelProvider_ToFfi(
  1. ModelProvider provider
)

Implementation

Pointer<Void> navigine_sdk_flutter_ModelProvider_ToFfi(ModelProvider provider) {
  final heap = ModelProviderNative.heap;
  final sendPort = heap.sendPort;
  final executablePort = __lib.createExecutePort();
  final modelId = navigine_sdk_flutter_String_ToFfi(provider.modelId);
  final nativeObject = newModelProvider(
      sendPort, executablePort, modelId, ModelProviderNative.getTextureNative);
  navigine_sdk_flutter_String_ReleaseFfiHandle(modelId);
  if (nativeObject == nullptr) {
    throw StateError('Failed to create native ModelProvider handle.');
  }

  // `nativeObject` is the transient FFI handle released after the call.
  // Native async callbacks use the underlying ModelProviderBinding* as key.
  final nativeObjectKey =
      _navigine_sdk_flutter_model_provider_GetObjectKey(nativeObject);
  if (nativeObjectKey == nullptr) {
    _navigine_sdk_flutter_model_provider_ReleaseHandle(nativeObject);
    throw StateError('Failed to get native ModelProvider callback key.');
  }
  heap.insertObject(nativeObjectKey, provider);

  return nativeObject;
}