Aliran penulisan kekal jelas.
Takrifkan mutasi sebagai kaedah provider, pantau state dengan MutationToken, dan laksanakan melalui ref.invoke(call).
Blok binaan mutasi
Mutasi ialah Call<R, State> yang dikembalikan daripada mutate(token, body, concurrency: ...).
Token
late final renameMut = mutation<void>(#rename)
Execution
await ref.invoke(provider.rename(...))
State
Idle / Pending / Success / Error via ref.watch(token)
Nota
Tidak seperti API gaya notifier.method(), miniriverpod menjadikan pelaksanaan mutasi sebagai objek panggilan kelas pertama.
Laksanakan mutasi
Gunakan ref.invoke supaya tingkah laku pembatalan dan penolakan kelihatan kepada pemanggil.
Jalankan
Pilihan konkurensi
concurrent : run all calls in parallel (default).
queue : FIFO; keep running queued calls even after an error.
restart : cancel previous run, keep only latest call.
dropLatest : drop incoming calls while one is running.
Contoh: kemas kini optimistik + restart
Corak tulis biasa mengemas kini AsyncData secara optimistik, kemudian menyegerakkan dengan respons pelayan.
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,
);
}
Langkah seterusnya
Flutter API
Hubungkan state mutasi ke UI menggunakan ConsumerWidget atau ConsumerStatefulWidget.
Buka API FlutterAPI Reference
Semak jenis invoke, mutation, mutate, dan MutationState dengan cepat.
Buka Rujukan API