riverpod_container_async

A library that supports asynchronous initialization and disposal processing for Riverpod's ProviderContainer. It enables safe execution of asynchronous initialization task management within Providers and asynchronous processing during ProviderContainer disposal.

Features

  • Asynchronous Initialization Support: Register asynchronous tasks during Provider initialization and wait for completion
  • Asynchronous Disposal Processing: Safely execute asynchronous processing when ProviderContainer is disposed
  • Task Queue Management: Execute initialization and disposal tasks sequentially and guarantee completion

Getting started

Add the following dependency to your pubspec.yaml:

dependencies:
  riverpod_container_async: ^2.0.0

Usage

import 'lib/riverpod_container_async.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

// Create ProviderContainer with asynchronous initialization and disposal support
final container = ProviderContainer(
  overrides: [
    ...ProviderContainerAsyncHelper.inject(),
    // Other overrides
  ],
);

// Perform asynchronous initialization within Provider
final myServiceProvider = Provider((ref) {
  final service = MyService();

  // Register asynchronous initialization task
  ref.registerInitializeTasks(service.initialize());

  // Register asynchronous disposal processing
  ref.onDisposeAsync(() async {
    await service.dispose();
  });

  return service;
});

// Usage example
void main() async {
  final container = ProviderContainer(
    overrides: ProviderContainerAsyncHelper.inject(),
  );

  // Wait for all initialization tasks to complete
  await container.waitInitializeTasks();

  // Run the application
  runApp(MyApp());

  // Execute asynchronous disposal on termination
  await container.disposeAsync();
}

Additional information

This package was created to safely execute asynchronous processing in Riverpod's ProviderContainer. Bug reports and feature requests are accepted at GitHub.