Skip to content

Commit a8d2b3a

Browse files
committed
refactor(content_management): improve snackbar logic and pending deletions handling
- Move snackbar logic out of the state and into the view - Replace direct BLoC access with PendingDeletionsService for undo action - Optimize state comparison for snackbar triggers - Simplify headline deletion snackbar display
1 parent d61a85d commit a8d2b3a

File tree

1 file changed

+21
-29
lines changed

1 file changed

+21
-29
lines changed

lib/content_management/view/archived_headlines_page.dart

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class _ArchivedHeadlinesView extends StatelessWidget {
3434
@override
3535
Widget build(BuildContext context) {
3636
final l10n = AppLocalizationsX(context).l10n;
37+
final pendingDeletionsService = context.read<PendingDeletionsService>();
3738
return Scaffold(
3839
appBar: AppBar(
3940
title: Text(l10n.archivedHeadlines),
@@ -42,10 +43,9 @@ class _ArchivedHeadlinesView extends StatelessWidget {
4243
padding: const EdgeInsets.all(AppSpacing.lg),
4344
child: BlocListener<ArchivedHeadlinesBloc, ArchivedHeadlinesState>(
4445
listenWhen: (previous, current) =>
45-
previous.pendingDeletions.length !=
46-
current.pendingDeletions.length ||
46+
previous.lastPendingDeletionId != current.lastPendingDeletionId ||
4747
previous.restoredHeadline != current.restoredHeadline ||
48-
previous.lastPendingDeletionId != current.lastPendingDeletionId,
48+
previous.snackbarHeadlineTitle != current.snackbarHeadlineTitle,
4949
listener: (context, state) {
5050
if (state.restoredHeadline != null) {
5151
// When a headline is restored, refresh the main headlines list.
@@ -59,33 +59,25 @@ class _ArchivedHeadlinesView extends StatelessWidget {
5959
}
6060

6161
// Show snackbar for pending deletions.
62-
if (state.lastPendingDeletionId != null &&
63-
state.pendingDeletions.containsKey(
64-
state.lastPendingDeletionId,
65-
)) {
66-
final headline =
67-
state.pendingDeletions[state.lastPendingDeletionId];
68-
if (headline != null) {
69-
final truncatedTitle = headline.title.truncate(30);
70-
ScaffoldMessenger.of(context)
71-
..hideCurrentSnackBar()
72-
..showSnackBar(
73-
SnackBar(
74-
content: Text(
75-
l10n.headlineDeleted(truncatedTitle),
76-
),
77-
action: SnackBarAction(
78-
label: l10n.undo,
79-
onPressed: () {
80-
// Dispatch UndoDeleteHeadlineRequested to the BLoC.
81-
context.read<ArchivedHeadlinesBloc>().add(
82-
UndoDeleteHeadlineRequested(headline.id),
83-
);
84-
},
85-
),
62+
if (state.snackbarHeadlineTitle != null) {
63+
final headlineId = state.lastPendingDeletionId!;
64+
final truncatedTitle = state.snackbarHeadlineTitle!.truncate(30);
65+
ScaffoldMessenger.of(context)
66+
..hideCurrentSnackBar()
67+
..showSnackBar(
68+
SnackBar(
69+
content: Text(
70+
l10n.headlineDeleted(truncatedTitle),
8671
),
87-
);
88-
}
72+
action: SnackBarAction(
73+
label: l10n.undo,
74+
onPressed: () {
75+
// Directly call undoDeletion on the service.
76+
pendingDeletionsService.undoDeletion(headlineId);
77+
},
78+
),
79+
),
80+
);
8981
}
9082
},
9183
child: BlocBuilder<ArchivedHeadlinesBloc, ArchivedHeadlinesState>(

0 commit comments

Comments
 (0)