Riverpod-ähnliche Ergonomie mit explizitem Laufzeitverhalten.

miniriverpod hält Provider und AsyncProvider vertraut, schränkt das Verhalten aber auf explizite APIs ein: subclass + args für familienähnliche Identität, Mutationstokens für Aktualisierungen und vorhersehbares Aufräumen des Lebenszyklus.

Keine Codegenerierung

Familienähnliche Provider, Overrides und Dependency Injection werden mit subclass + args + Scope modelliert, ganz ohne Codegenerierung.

Einheitliches Async-Modell

Ein einzelner AsyncProvider behandelt Future und Stream mit striktem Abbruch bei Rebuild, Invalidate, Refresh und Dispose.

Built-in Concurrency

Mutationsaufrufe unterstützen concurrent, queue, restart und dropLatest über ref.invoke(provider.method()).

Empfohlener Einstiegspfad

Wickeln Sie Ihre App mit ProviderScope ein, definieren Sie Provider/AsyncProvider-Klassen und führen Sie Statusaktualisierungen über ref.invoke mit expliziter Nebenläufigkeit aus.

Installieren

flutter pub add miniriverpod

Mutation + Invoke

lib/main.dart
class UserProvider extends AsyncProvider<User?> {
  UserProvider() : super.args(null);

  late final renameMut = mutation<void>(#rename);

  Call<void, AsyncValue<User?>> rename(String name) => mutate(
    renameMut,
    (ref) async {
      final api = ref.watch(apiProvider);
      await api.rename(name);
      ref.state = AsyncData(await api.me());
    },
    concurrency: Concurrency.restart,
  );
}

// UI
await ref.invoke(userProvider.rename('Alice'));
Compatibility Note

miniriverpod bleibt bewusst Provider + AsyncProvider + WidgetRef nah an Riverpod, ersetzt aber codegen-lastige Pfade durch subclass + args, Scope-basierte Injektion und explizite Mutationsaufrufe.