Ergonomia in stile Riverpod con comportamento runtime esplicito.

miniriverpod mantiene familiari Provider e AsyncProvider, ma restringe il comportamento in API esplicite: subclass + args per un'identità tipo family, token di mutazione per gli aggiornamenti e un ciclo di vita prevedibile.

Nessuna generazione di codice

provider simili alle family, override e dependency injection sono modellati con subclass + args + Scope, senza generazione di codice.

Modello async unificato

Un singolo AsyncProvider gestisce Future e Stream, con cancellazione rigorosa su rebuild, invalidate, refresh e dispose.

Concorrenza integrata

Le chiamate di mutazione supportano concurrent, queue, restart e dropLatest tramite ref.invoke(provider.method()).

Percorso di onboarding consigliato

Avvolgi la tua app con ProviderScope, definisci classi Provider/AsyncProvider e gestisci gli aggiornamenti di stato tramite ref.invoke con concorrenza esplicita.

Installa

flutter pub add miniriverpod

Mutazione + 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'));
Nota di compatibilità

miniriverpod mantiene intenzionalmente Provider + AsyncProvider + WidgetRef una distanza ridotta da Riverpod, ma sostituisce i percorsi pesanti di codegen con subclass + args, injection basata su Scope e chiamate di mutazione esplicite.

Precedente

Open Source

Successivo

Installazione