Эрганоміка ў стылі Riverpod з выразнымі паводзінамі падчас выканання.

miniriverpod захоўвае знаёмыя Provider і AsyncProvider, але звужае паводзіны да выразных API: падклас + аргументы для сямейнападобнай ідэнтычнасці, токены змяненняў для абнаўленняў і прадказальнае вызваленне рэсурсаў жыццёвага цыклу.

Без генерацыі кода

Правайдэры, падобныя да family, перазапісы і ўкараненне залежнасцяў мадэлююцца праз падклас + аргументы + Scope без генерацыі кода.

Адзіная мадэль асінхроннасці

Адзін AsyncProvider апрацоўвае Future і Stream са строгім адменай пры rebuild, invalidate, refresh і dispose.

Убудаваная канкурэнтнасць

Выклікі мутацый падтрымліваюць рэжымы concurrent, queue, restart і dropLatest праз ref.invoke(provider.method()).

Рэкамендаваны шлях пачатку працы

Абгарніце сваю праграму ў ProviderScope, вызначце класы Provider/AsyncProvider і абнаўляйце стан праз ref.invoke з выразным кантролем канкурэнцыі.

Усталяваць

flutter pub add miniriverpod

Мутацыя + 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,
  );
}

// Інтэрфейс
await ref.invoke(userProvider.rename('Alice'));
Заўвага пра сумяшчальнасць

miniriverpod наўмысна застаецца Provider + AsyncProvider + WidgetRef блізкім да Riverpod, але замяняе цяжкія шляхі генерацыі кода на падклас + args, укараненне праз Scope і выразныя выклікі мутацый.