Implement Optimistic Updates
Convertor Tuple Input Pattern
Mutations use a (Params, bool) tuple to optionally enable optimistic responses.
Implement Optimistic Updates
Section titled “Implement Optimistic Updates”Mutation Request Convertor with Tuple Input
Section titled “Mutation Request Convertor with Tuple Input”@riverpodConvertor<GMutateAttendeeSaveReq, (UpsertRequestParams<GMutateAttendeeSaveVars>, bool)>attendeeUpsertConvertor(Ref ref) { return Convertor((params) { final (requestParams, optimistic) = params; return GMutateAttendeeSaveReq((builder) { builder ..requestId = 'attendee_upsert_${requestParams.toString()}' ..vars = requestParams.vars.toBuilder(); if (optimistic) { builder ..optimisticResponse.attendeeSave.id = '__optimistic__' ..optimisticResponse.attendeeSave.fullName = requestParams.vars.attendeeArg?.fullName; } }); });}Repository Method
Section titled “Repository Method”Stream<AttendeeModel> upsert({ required AttendeeUpsertInput input, bool optimistic = true,}) { final vars = inputConvertor.execute(input); return upsertDatasource .thenMap(mutationModelConvertor) .execute((UpsertRequestParams(vars: vars), optimistic));}How It Works
Section titled “How It Works”- Optimistic = true: Ferry immediately updates cache with optimistic data
- Server responds: Ferry replaces optimistic entry with real data
- Error case: Ferry rolls back the optimistic update automatically