toNativeImageProviderPtr function

Pointer<Void> toNativeImageProviderPtr(
  1. ImageProvider provider
)

Returns ImageProvider native pointer for callbacks (binding key or native provider).

Implementation

Pointer<Void> toNativeImageProviderPtr(ImageProvider provider) {
  if (provider is NativeImageProviderWrapper) {
    return provider.rawPointer;
  }
  if (provider._bindingKey != null) {
    return provider._bindingKey!;
  }

  final heap = GetImageProviderData.heap;
  final sendPort = heap.sendPort;
  final nativeObject = newImageProvider(
      provider.cacheable, sendPort, toNativeString(provider.id));
  if (nativeObject == nullptr) {
    throw StateError('Failed to create native ImageProvider handle.');
  }

  final nativeObjectKey =
      _navigine_sdk_flutter_image_provider_GetObjectKey(nativeObject);
  if (nativeObjectKey == nullptr) {
    _navigine_sdk_flutter_image_provider_ReleaseHandle(nativeObject);
    throw StateError('Failed to get native ImageProvider callback key.');
  }
  provider._bindingKey = nativeObjectKey;
  heap.insertObject(nativeObjectKey, provider);
  ImageProviderImpl.releaseNativePtr(nativeObject);

  return nativeObjectKey;
}