Riverpod-ის სტილის ერგონომიკა ცალსახა runtime ქცევით.

miniriverpod ინარჩუნებს Provider-სა და AsyncProvider-ს ნაცნობად, მაგრამ ქცევას ცალსახა API-ებად ამცირებს: subclass + args family-ის მსგავს იდენტურობისთვის, mutation tokens განახლებებისთვის და პროგნოზირებადი lifecycle dispose.

კოდის გენერაციის გარეშე

family-ს მსგავსი provider-ები, override-ები და dependency injection მოდელდება subclass + args + Scope-ით, code generation-ის გარეშე.

გაერთიანებული async მოდელი

ერთ AsyncProvider-ს შეუძლია Future და Stream-ის მართვა, rebuild, invalidate, refresh და dispose-ზე მკაცრი გაუქმებით.

ჩაშენებული კონკურენტულობა

Mutation call-ები მხარს უჭერს concurrent, queue, restart და dropLatest რეჟიმებს ref.invoke(provider.method())-ის საშუალებით.

რეკომენდებული დაწყების ნაკადი

შემოახვიეთ თქვენი აპი ProviderScope-ით, განსაზღვრეთ Provider/AsyncProvider კლასები და state განახლებები გაატარეთ 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,
  );
}

// UI
await ref.invoke(userProvider.rename('Alice'));
თავსებადობის შენიშვნა

miniriverpod განზრახ ინარჩუნებს Provider + AsyncProvider + WidgetRef Riverpod-თან სიახლოვეს, მაგრამ codegen-ზე მძიმე გზებს ცვლის subclass + args-ით, Scope-ზე დაფუძნებული injection-ით და ცალსახა mutation call-ებით.