Yazma axını açıq qalır.
Mutasiyaları provider metodları kimi təyin edin, state-i MutationToken ilə izləyin və ref.invoke(call) vasitəsilə icra edin.
Mutation əsas blokları
Mutation, mutate(token, body, concurrency: ...) tərəfindən qaytarılan Call<R, State>-dir.
Token
late final renameMut = mutation<void>(#rename)
İcra
await ref.invoke(provider.rename(...))
State
Idle / Pending / Success / Error via ref.watch(token)
Qeyd
notifier.method() tərzli API-lərdən fərqli olaraq, miniriverpod mutation icrasını birinci dərəcəli çağırış obyekti kimi təqdim edir.
Mutasiyanı icra et
Cancellation və drop davranışlarını çağırana göstərmək üçün ref.invoke istifadə edin.
İşə sal
Paralellik seçimləri
concurrent : bütün çağırışları paralel icra et (standart).
queue : FIFO; xəta olsa belə növbədəki çağırışları icra etməyə davam et.
restart : əvvəlki icranı ləğv et, yalnız son çağırışı saxla.
dropLatest : biri işləyərkən daxil olan çağırışları at.
Nümunə: optimistik yeniləmə + restart
Yaygın yazma nümunəsi əvvəlcə AsyncData-nı optimistik yeniləyir, sonra server cavabı ilə sinxronlaşır.
class UserProvider extends AsyncProvider<User?> {
UserProvider() : super.args(null);
late final renameMut = mutation<void>(#rename);
Call<void, AsyncValue<User?>> rename(String newName) => mutate(
renameMut,
(ref) async {
final cur = ref.watch(this).valueOrNull;
ref.state = AsyncData((cur ?? const User()).copyWith(name: newName), isRefreshing: true);
final api = ref.watch(apiProvider);
await api.rename(newName);
ref.state = AsyncData(await api.me());
},
concurrency: Concurrency.restart,
);
}
Növbəti Addımlar
Flutter API
Mutasiya state-ni ConsumerWidget və ya ConsumerStatefulWidget ilə UI-yə bağlayın.
Flutter API-ni aç