runInIsolate<R> method

  1. @protected
Future<R> runInIsolate<R>(
  1. FutureOr<R> fn(
    1. Adapter<DataModelMixin> adapter
    )
)
inherited

Implementation

@protected
Future<R> runInIsolate<R>(FutureOr<R> fn(Adapter adapter)) async {
  final storagePath = Directory(storage.path).parent.path;
  final internalProvidersMap = _internalProvidersMap!;
  final _internalType = internalType;

  return await Isolate.run(() async {
    late final ProviderContainer container;
    try {
      container = ProviderContainer(
        overrides: [
          localStorageProvider.overrideWith(
            (ref) => LocalStorage(baseDirFn: () => storagePath),
          ),
        ],
      );

      await container
          .read(initializeFlutterData(internalProvidersMap).future);

      final adapter = internalProvidersMap[_internalType]!;
      return fn(container.read(adapter));
    } finally {
      for (final provider in internalProvidersMap.values) {
        container.read(provider).dispose();
      }
      container.read(localStorageProvider).dispose();
    }
  });
}