bloomBUILD•SHIP•BLOOM
.md
Mutations

Mutations & Optimistic Updates

Execute asynchronous mutations against backend APIs with automatic rollback mechanisms and offline queue persistence.

Optimistic Mutation Pattern

lib/features/posts/posts_controller.dart
dart
// lib/features/posts/posts_controller.dart
import 'package:bloom_framework/bloom.dart';
import '../services/api_service.dart';

class PostsController extends BloomController {
  late final deletePostMutation = createMutation<void, String>(
    mutationFn: (postId) => inject<ApiService>().deletePost(postId),
    onMutate: (postId) async {
      final prev = postsQuery.data.value;
      // Optimistically remove from UI
      postsQuery.setData((prev ?? []).where((p) => p.id != postId).toList());
      return {'snapshot': prev};
    },
    onError: (err, postId, ctx) {
      if (ctx?['snapshot'] != null) {
        postsQuery.setData(ctx!['snapshot'] as List<Post>);
      }
    },
    onSettled: (data, err, postId, ctx) {
      postsQuery.invalidate();
    },
  );
}