Ергономия в стил Riverpod с изрично поведение по време на изпълнение.

miniriverpod запазва познатите Provider и AsyncProvider, но свежда поведението до изрични API: подклас + аргументи за family-подобна идентичност, токени за мутации за обновления и предсказуемо освобождаване на жизнения цикъл.

Без генериране на код

family-подобните провайдъри, override-ите и dependency injection се моделират с подклас + аргументи + 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 и изрични извиквания на мутации.