Skip to content

Commit 57afad4

Browse files
committed
refactor(headlines-feed): remove decorator dismissal functionality
- Remove FeedDecoratorDismissed event from headlines_feed_event.dart - Remove _onFeedDecoratorDismissed handler from headlines_feed_bloc.dart - Remove onDismiss callbacks from headlines_feed_page.dart - Update imports and dependencies related to decorator dismissal
1 parent c646379 commit 57afad4

File tree

3 files changed

+0
-99
lines changed

3 files changed

+0
-99
lines changed

lib/headlines-feed/bloc/headlines_feed_bloc.dart

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,6 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
119119
_onHeadlinesFeedFiltersCleared,
120120
transformer: restartable(),
121121
);
122-
on<FeedDecoratorDismissed>(
123-
_onFeedDecoratorDismissed,
124-
transformer: sequential(),
125-
);
126122
on<CallToActionTapped>(_onCallToActionTapped, transformer: sequential());
127123
on<NavigationHandled>(_onNavigationHandled, transformer: sequential());
128124
on<_AppContentPreferencesChanged>(_onAppContentPreferencesChanged);
@@ -717,73 +713,6 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
717713
}
718714
}
719715

720-
Future<void> _onFeedDecoratorDismissed(
721-
FeedDecoratorDismissed event,
722-
Emitter<HeadlinesFeedState> emit,
723-
) async {
724-
_logger.info(
725-
'Dismissing decorator: ${event.feedDecoratorType}. '
726-
'Updating cache and UI.',
727-
);
728-
final currentUser = _appBloc.state.user;
729-
if (currentUser == null) return;
730-
731-
// First, notify the AppBloc that the user has completed this action.
732-
// This prevents the decorator from being shown again in future sessions.
733-
_appBloc.add(
734-
AppUserFeedDecoratorShown(
735-
userId: currentUser.id,
736-
feedDecoratorType: event.feedDecoratorType,
737-
isCompleted: true,
738-
),
739-
);
740-
741-
// Second, update the in-memory cache for the current session.
742-
// This ensures the decorator is removed immediately from the current view
743-
// and does not reappear when switching between feed filters.
744-
final filterKey = _generateFilterKey(state.activeFilterId!, state.filter);
745-
final cachedFeed = _feedCacheService.getFeed(filterKey);
746-
747-
if (cachedFeed == null) {
748-
_logger.warning(
749-
'Cannot update cache on decorator dismissal: '
750-
'No cached feed found for key "$filterKey".',
751-
);
752-
// Fallback to just removing from the UI state if cache is not found.
753-
final newFeedItems = List<FeedItem>.from(state.feedItems)
754-
..removeWhere((item) {
755-
if (item is CallToActionItem) {
756-
return item.decoratorType == event.feedDecoratorType;
757-
}
758-
if (item is ContentCollectionItem) {
759-
return item.decoratorType == event.feedDecoratorType;
760-
}
761-
return false;
762-
});
763-
emit(state.copyWith(feedItems: newFeedItems));
764-
return;
765-
}
766-
767-
// Perform the "read-modify-write" cycle on the cache.
768-
final newFeedItems = List<FeedItem>.from(cachedFeed.feedItems)
769-
..removeWhere((item) {
770-
if (item is CallToActionItem) {
771-
return item.decoratorType == event.feedDecoratorType;
772-
} else if (item is ContentCollectionItem) {
773-
return item.decoratorType == event.feedDecoratorType;
774-
}
775-
return false;
776-
});
777-
778-
final updatedCachedFeed = cachedFeed.copyWith(feedItems: newFeedItems);
779-
_feedCacheService.setFeed(filterKey, updatedCachedFeed);
780-
_logger.info(
781-
'Cache for key "$filterKey" updated after decorator dismissal.',
782-
);
783-
784-
emit(state.copyWith(feedItems: newFeedItems));
785-
}
786-
787716
Future<void> _onCallToActionTapped(
788717
CallToActionTapped event,
789718
Emitter<HeadlinesFeedState> emit,

lib/headlines-feed/bloc/headlines_feed_event.dart

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -116,20 +116,6 @@ final class HeadlinesFeedFiltersCleared extends HeadlinesFeedEvent {
116116
List<Object> get props => [adThemeStyle];
117117
}
118118

119-
/// {@template feed_decorator_dismissed}
120-
/// Event triggered when a user dismisses a feed decorator.
121-
/// {@endtemplate}
122-
final class FeedDecoratorDismissed extends HeadlinesFeedEvent {
123-
/// {@macro feed_decorator_dismissed}
124-
const FeedDecoratorDismissed({required this.feedDecoratorType});
125-
126-
/// The type of the decorator that was dismissed.
127-
final FeedDecoratorType feedDecoratorType;
128-
129-
@override
130-
List<Object> get props => [feedDecoratorType];
131-
}
132-
133119
/// {@template call_to_action_tapped}
134120
/// Event triggered when a user taps the call-to-action button on a decorator.
135121
/// {@endtemplate}

lib/headlines-feed/view/headlines_feed_page.dart

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -322,13 +322,6 @@ class _HeadlinesFeedPageState extends State<HeadlinesFeedPage>
322322
CallToActionTapped(url: url),
323323
);
324324
},
325-
onDismiss: (decoratorType) {
326-
context.read<HeadlinesFeedBloc>().add(
327-
FeedDecoratorDismissed(
328-
feedDecoratorType: decoratorType,
329-
),
330-
);
331-
},
332325
);
333326
} else if (item is ContentCollectionItem) {
334327
// Access AppBloc to get the user's content preferences,
@@ -400,13 +393,6 @@ class _HeadlinesFeedPageState extends State<HeadlinesFeedPage>
400393
),
401394
);
402395
},
403-
onDismiss: (decoratorType) {
404-
context.read<HeadlinesFeedBloc>().add(
405-
FeedDecoratorDismissed(
406-
feedDecoratorType: decoratorType,
407-
),
408-
);
409-
},
410396
);
411397
}
412398
return const SizedBox.shrink();

0 commit comments

Comments
 (0)