toggle method
- required BookmarkKind kind,
- required String targetId,
Toggle the bookmark for targetId of the given kind. After the
write succeeds, invalidates bookmarksProvider and the matching
isBookmarkedProvider so dependent UI refreshes.
Implementation
Future<void> toggle({
required BookmarkKind kind,
required String targetId,
}) async {
final ds = ref.read(supabaseDatasourceProvider);
final wasBookmarked = await ds.isBookmarked(kind: kind, targetId: targetId);
state = const AsyncLoading();
try {
if (wasBookmarked) {
await ds.deleteBookmarkByTarget(kind: kind, targetId: targetId);
} else {
await ds.createBookmark(kind: kind, targetId: targetId);
}
state = const AsyncData(null);
// Refresh dependent reads.
ref.invalidate(bookmarksProvider);
ref.invalidate(isBookmarkedProvider(kind: kind, targetId: targetId));
} catch (e, st) {
state = AsyncError(e, st);
rethrow;
}
}