diff --git a/lib/headlines-feed/view/headlines_feed_page.dart b/lib/headlines-feed/view/headlines_feed_page.dart index 11cd8949..dd617eaf 100644 --- a/lib/headlines-feed/view/headlines_feed_page.dart +++ b/lib/headlines-feed/view/headlines_feed_page.dart @@ -216,7 +216,10 @@ class _HeadlinesFeedPageState extends State { } // Otherwise, build the headline item final headline = state.headlines[index]; - return HeadlineItemWidget(headline: headline); + return HeadlineItemWidget( + headline: headline, + targetRouteName: Routes.articleDetailsName, + ); }, ), ); diff --git a/lib/headlines-feed/widgets/headline_item_widget.dart b/lib/headlines-feed/widgets/headline_item_widget.dart index cb27b0cb..f48cb161 100644 --- a/lib/headlines-feed/widgets/headline_item_widget.dart +++ b/lib/headlines-feed/widgets/headline_item_widget.dart @@ -8,11 +8,18 @@ import 'package:intl/intl.dart'; // For date formatting /// A widget that displays a single headline with enhanced styling. class HeadlineItemWidget extends StatelessWidget { /// Creates a [HeadlineItemWidget]. - const HeadlineItemWidget({required this.headline, super.key}); + const HeadlineItemWidget({ + required this.headline, + required this.targetRouteName, // Add targetRouteName + super.key, + }); /// The headline to display. final Headline headline; + /// The named route to navigate to when the item is tapped. + final String targetRouteName; // Add targetRouteName + // Helper for date formatting static final _dateFormatter = DateFormat.yMd().add_jm(); @@ -38,7 +45,7 @@ class HeadlineItemWidget extends StatelessWidget { child: InkWell( onTap: () { context.goNamed( - Routes.articleDetailsName, + targetRouteName, // Use the new parameter here pathParameters: {'id': headline.id}, ); }, diff --git a/lib/headlines-search/view/headlines_search_page.dart b/lib/headlines-search/view/headlines_search_page.dart index ce9bc380..335e116d 100644 --- a/lib/headlines-search/view/headlines_search_page.dart +++ b/lib/headlines-search/view/headlines_search_page.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:ht_main/headlines-feed/widgets/headline_item_widget.dart'; +import 'package:ht_main/router/routes.dart'; // Import Routes import 'package:ht_main/headlines-search/bloc/headlines_search_bloc.dart'; import 'package:ht_main/l10n/l10n.dart'; import 'package:ht_main/shared/constants/app_spacing.dart'; // Import AppSpacing @@ -216,7 +217,10 @@ class _HeadlinesSearchViewState extends State<_HeadlinesSearchView> { ); } // Display headline item - return HeadlineItemWidget(headline: headlines[index]); + return HeadlineItemWidget( + headline: headlines[index], + targetRouteName: Routes.searchArticleDetailsName, + ); }, ), // Default case (should ideally not be reached if states are handled) diff --git a/lib/router/router.dart b/lib/router/router.dart index 92473519..52acb83f 100644 --- a/lib/router/router.dart +++ b/lib/router/router.dart @@ -444,6 +444,24 @@ GoRouter createRouter({ path: Routes.search, // '/search' name: Routes.searchName, builder: (context, state) => const HeadlinesSearchPage(), + routes: [ + // Sub-route for article details from search + GoRoute( + path: 'article/:id', // Relative path + name: Routes.searchArticleDetailsName, // New route name + builder: (context, state) { + final id = state.pathParameters['id']!; + return BlocProvider( + create: + (context) => HeadlineDetailsBloc( + headlinesRepository: + context.read>(), + )..add(HeadlineDetailsRequested(headlineId: id)), + child: HeadlineDetailsPage(headlineId: id), + ); + }, + ), + ], ), ], ), diff --git a/lib/router/routes.dart b/lib/router/routes.dart index 8e9f8ae5..58744860 100644 --- a/lib/router/routes.dart +++ b/lib/router/routes.dart @@ -25,6 +25,8 @@ abstract final class Routes { // --- Sub Routes --- // Article details is now relative to feed static const articleDetailsName = 'articleDetails'; + // Add a new name for article details when accessed from search + static const searchArticleDetailsName = 'searchArticleDetails'; // Settings is now relative to account static const settings = 'settings'; // Relative path static const settingsName = 'settings';