Tok zápisu zůstává explicitní.
Definujte mutace jako metody provideru, sledujte stav pomocí MutationToken a spouštějte je přes ref.invoke(call).
Stavební bloky mutací
Mutace je Call<R, State> vrácený z mutate(token, body, concurrency: ...).
Token
late final renameMut = mutation<void>(#rename)
Provedení
await ref.invoke(provider.rename(...))
Stav
Nečinný / Čekající / Úspěch / Chyba přes ref.watch(token)
Poznámka
Na rozdíl od API ve stylu notifier.method() dává miniriverpod provedení mutace jako objekt volání první třídy.
Spustit mutaci
Použijte ref.invoke, aby se zrušení a zahazování projevilo volajícímu.
Spustit
Možnosti souběžnosti
concurrent : spustit všechna volání paralelně (výchozí).
queue : FIFO; pokračovat ve spouštění zařazených volání i po chybě.
restart : zrušit předchozí běh a ponechat jen poslední volání.
dropLatest : zahazovat příchozí volání, dokud běží jedno jiné.
Příklad: optimistická aktualizace + restart
Běžný zápisový vzor nejprve optimisticky aktualizuje AsyncData a poté se synchronizuje s odpovědí serveru.
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,
);
}
Další kroky
Flutter API
Propojte stav mutace s uživatelským rozhraním pomocí ConsumerWidget nebo ConsumerStatefulWidget.
Otevřít Flutter APIReference API
Rychle si projděte typy invoke, mutation, mutate a MutationState.
Otevřít referenci API