11import 'package:core/core.dart' ;
22import 'package:flutter/material.dart' ;
33import 'package:flutter_bloc/flutter_bloc.dart' ;
4- import 'package:flutter_news_app_mobile_client_full_source_code/ads/services/interstitial_ad_manager.dart' ;
54import 'package:flutter_news_app_mobile_client_full_source_code/app/bloc/app_bloc.dart' ;
65import 'package:flutter_news_app_mobile_client_full_source_code/app/models/app_life_cycle_status.dart' ;
76import 'package:flutter_news_app_mobile_client_full_source_code/l10n/l10n.dart' ;
8- import 'package:flutter_news_app_mobile_client_full_source_code/router/routes.dart' ;
97import 'package:flutter_news_app_mobile_client_full_source_code/shared/widgets/feed_core/feed_core.dart' ;
108import 'package:go_router/go_router.dart' ;
119import 'package:ui_kit/ui_kit.dart' ;
@@ -25,7 +23,6 @@ class SavedHeadlinesPage extends StatelessWidget {
2523 final l10n = AppLocalizationsX (context).l10n;
2624 final theme = Theme .of (context);
2725 final textTheme = theme.textTheme;
28- final colorScheme = theme.colorScheme;
2926
3027 return Scaffold (
3128 appBar: AppBar (
@@ -74,21 +71,6 @@ class SavedHeadlinesPage extends StatelessWidget {
7471 );
7572 }
7673
77- Future <void > onHeadlineTap (Headline headline) async {
78- // Await for the ad to be shown and dismissed.
79- await context.read <InterstitialAdManager >().onPotentialAdTrigger ();
80-
81- // Check if the widget is still in the tree before navigating.
82- if (! context.mounted) return ;
83-
84- // Proceed with navigation after the ad is closed.
85- await context.pushNamed (
86- Routes .accountArticleDetailsName,
87- pathParameters: {'id' : headline.id},
88- extra: headline,
89- );
90- }
91-
9274 return ListView .separated (
9375 padding: const EdgeInsets .symmetric (
9476 vertical: AppSpacing .paddingSmall,
@@ -102,48 +84,28 @@ class SavedHeadlinesPage extends StatelessWidget {
10284 itemBuilder: (context, index) {
10385 final headline = savedHeadlines[index];
10486 final imageStyle =
105- appState.settings? .feedPreferences.headlineImageStyle ??
106- HeadlineImageStyle .smallThumbnail;
107-
108- final trailingButton = IconButton (
109- icon: Icon (Icons .delete_outline, color: colorScheme.error),
110- tooltip: l10n.headlineDetailsRemoveFromSavedTooltip,
111- onPressed: () {
112- final updatedSavedHeadlines = List <Headline >.from (
113- savedHeadlines,
114- )..removeWhere ((h) => h.id == headline.id);
115-
116- final updatedPreferences = userContentPreferences.copyWith (
117- savedHeadlines: updatedSavedHeadlines,
118- );
119-
120- context.read <AppBloc >().add (
121- AppUserContentPreferencesChanged (
122- preferences: updatedPreferences,
123- ),
124- );
125- },
126- );
87+ appState.settings? .feedSettings.feedItemImageStyle ??
88+ FeedItemImageStyle .smallThumbnail;
12789
12890 Widget tile;
12991 switch (imageStyle) {
130- case HeadlineImageStyle .hidden:
92+ case FeedItemImageStyle .hidden:
13193 tile = HeadlineTileTextOnly (
13294 headline: headline,
133- onHeadlineTap: () => onHeadlineTap (headline),
134- trailing : trailingButton ,
95+ onHeadlineTap: () =>
96+ HeadlineTapHandler . handleHeadlineTap (context, headline) ,
13597 );
136- case HeadlineImageStyle .smallThumbnail:
98+ case FeedItemImageStyle .smallThumbnail:
13799 tile = HeadlineTileImageStart (
138100 headline: headline,
139- onHeadlineTap: () => onHeadlineTap (headline),
140- trailing : trailingButton ,
101+ onHeadlineTap: () =>
102+ HeadlineTapHandler . handleHeadlineTap (context, headline) ,
141103 );
142- case HeadlineImageStyle .largeThumbnail:
104+ case FeedItemImageStyle .largeThumbnail:
143105 tile = HeadlineTileImageTop (
144106 headline: headline,
145- onHeadlineTap: () => onHeadlineTap (headline),
146- trailing : trailingButton ,
107+ onHeadlineTap: () =>
108+ HeadlineTapHandler . handleHeadlineTap (context, headline) ,
147109 );
148110 }
149111 return tile;
0 commit comments