Riverpod-ոճի ergonomics՝ հստակ runtime վարքով։

miniriverpod-ը պահպանում է Provider և AsyncProvider-ի ծանոթությունը, բայց վարքը նեղացնում է հստակ API-ների մեջ՝ subclass + args family-ի նման ինքնության համար, mutation token-ներ թարմացումների համար, և կանխատեսելի lifecycle disposal։

Առանց կոդի գեներացման

family-ի նման provider-ները, overrides-ը և dependency injection-ը մոդելավորվում են subclass + args + Scope-ով՝ առանց կոդի գեներացման։

Միասնական Async մոդել

Միակ AsyncProvider-ը կառավարում է Future և Stream, խիստ չեղարկմամբ rebuild, invalidate, refresh և dispose ժամանակ։

Ներկառուցված համընթացություն

Mutation կանչերը աջակցում են concurrent, queue, restart և dropLatest ռեժիմներին ref.invoke(provider.method()) միջոցով։

Առաջարկվող մեկնարկային հոսք

Ակոսել ձեր հավելվածը ProviderScope-ով, սահմանել Provider/AsyncProvider դասեր և ref.invoke-ի միջոցով գործարկել state թարմացումներ՝ հստակ concurrency-ով։

Տեղադրում

flutter pub add miniriverpod

Mutation + 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-heavy ուղիները փոխարինում է subclass + args, Scope-ի վրա հիմնված injection-ով և հստակ mutation կանչերով։

Նախորդ

Բաց կոդ