Η ροή εγγραφής παραμένει ρητή.
Ορίστε τις μεταβολές ως μεθόδους provider, παρακολουθήστε την κατάσταση με MutationToken και εκτελέστε τες μέσω ref.invoke(call).
Δομικά στοιχεία των μεταβολών
Μια μεταβολή είναι ένα Call<R, State> που επιστρέφεται από το 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)
Σημείωση
Σε αντίθεση με τα API τύπου notifier.method(), το miniriverpod κάνει την εκτέλεση της μεταβολής ένα call object πρώτης τάξης.
Εκτέλεση μιας μεταβολής
Χρησιμοποιήστε ref.invoke ώστε οι συμπεριφορές ακύρωσης και drop να είναι ορατές στον καλούντα.
Εκτέλεση
Επιλογές ταυτόχρονης εκτέλεσης
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.
Παράδειγμα: αισιόδοξη ενημέρωση + restart
Ένα συνηθισμένο μοτίβο εγγραφής ενημερώνει το AsyncData αισιόδοξα και μετά συγχρονίζεται με την απάντηση του διακομιστή.
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,
);
}
Επόμενα βήματα
Flutter API
Συνδέστε την κατάσταση της μεταβολής με το UI χρησιμοποιώντας ConsumerWidget ή ConsumerStatefulWidget.
Άνοιγμα Flutter APIAPI Reference
Δείτε γρήγορα τους τύπους invoke, mutation, mutate και MutationState.
Άνοιγμα API Reference