Η ροή εγγραφής παραμένει ρητή.

Ορίστε τις μεταβολές ως μεθόδους 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,
  );
}
restart μπορεί να ρίξει CancelledMutation σε παλαιότερους καλούντες.
dropLatest μπορεί να ρίξει DroppedMutation ενώ είναι απασχολημένο.
Πιάστε τα στο UI όταν θέλετε να καταστείλετε προσωρινά σφάλματα ακύρωσης.

Επόμενα βήματα

Flutter API

Συνδέστε την κατάσταση της μεταβολής με το UI χρησιμοποιώντας ConsumerWidget ή ConsumerStatefulWidget.

Άνοιγμα Flutter API

API Reference

Δείτε γρήγορα τους τύπους invoke, mutation, mutate και MutationState.

Άνοιγμα API Reference