getNativePtr static method

Pointer<Void> getNativePtr(
  1. ImageProvider? provider
)

Implementation

static Pointer<Void> getNativePtr(ImageProvider? provider) {
  if (provider == null) return Pointer<Void>.fromAddress(0);
  if (provider is NativeImageProviderWrapper) {
    return provider.rawPointer;
  }

  if (provider._bindingKey != null) {
    final handle = _navigine_sdk_flutter_image_provider_Acquire(
        provider._bindingKey!);
    if (handle == nullptr) {
      throw StateError('Failed to acquire native ImageProvider handle.');
    }
    return handle;
  }

  final heap = GetImageProviderData.heap;
  final sendPort = heap.sendPort;
  final providerId = toNativeString(provider.id);
  final nativeObject =
      newImageProvider(provider.cacheable, sendPort, providerId);
  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);

  return nativeObject;
}