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
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-ებით.
წინა
ღია კოდიშემდეგი
ინსტალაცია