Skip to content

Commit c8621dc

Browse files
authored
Merge pull request #61 from headlines-toolkit/fix_search_page
Fix search page
2 parents 6cbd692 + 8ba9eca commit c8621dc

File tree

7 files changed

+46
-10
lines changed

7 files changed

+46
-10
lines changed

lib/bootstrap.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:flutter/foundation.dart' show kIsWeb;
21
import 'package:flutter/material.dart';
32
import 'package:flutter_bloc/flutter_bloc.dart';
43
import 'package:ht_auth_api/ht_auth_api.dart';
@@ -16,7 +15,9 @@ import 'package:ht_main/app/config/config.dart' as app_config;
1615
import 'package:ht_main/app/services/demo_data_migration_service.dart';
1716
import 'package:ht_main/bloc_observer.dart';
1817
import 'package:ht_shared/ht_shared.dart';
18+
import 'package:ht_ui_kit/ht_ui_kit.dart';
1919
import 'package:logging/logging.dart';
20+
import 'package:timeago/timeago.dart' as timeago;
2021

2122
Future<Widget> bootstrap(
2223
app_config.AppConfig appConfig,
@@ -25,6 +26,9 @@ Future<Widget> bootstrap(
2526
WidgetsFlutterBinding.ensureInitialized();
2627
Bloc.observer = const AppBlocObserver();
2728

29+
timeago.setLocaleMessages('en', EnTimeagoMessages());
30+
timeago.setLocaleMessages('ar', ArTimeagoMessages());
31+
2832
final logger = Logger('bootstrap');
2933

3034
final kvStorage = await HtKvStorageSharedPreferences.getInstance();

lib/headlines-search/view/headlines_search_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:ht_main/app/bloc/app_bloc.dart';
99
import 'package:ht_main/headlines-search/bloc/headlines_search_bloc.dart';
1010
// import 'package:ht_main/headlines-search/widgets/country_item_widget.dart';
1111
import 'package:ht_main/headlines-search/widgets/source_item_widget.dart';
12+
import 'package:ht_main/headlines-search/widgets/topic_item_widget.dart';
1213
import 'package:ht_main/l10n/l10n.dart';
1314
import 'package:ht_main/router/routes.dart';
1415
import 'package:ht_main/shared/extensions/content_type_extensions.dart';
@@ -332,8 +333,7 @@ class _HeadlinesSearchViewState extends State<_HeadlinesSearchView> {
332333
}
333334
return tile;
334335
} else if (feedItem is Topic) {
335-
// TODO(user): Create a TopicItemWidget similar to CategoryItemWidget
336-
return ListTile(title: Text(feedItem.name));
336+
return TopicItemWidget(topic: feedItem);
337337
} else if (feedItem is Source) {
338338
return SourceItemWidget(source: feedItem);
339339
} else if (feedItem is Ad) {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:go_router/go_router.dart';
3+
import 'package:ht_main/entity_details/view/entity_details_page.dart';
4+
import 'package:ht_main/router/routes.dart';
5+
import 'package:ht_shared/ht_shared.dart';
6+
7+
/// A simple widget to display a Topic search result.
8+
class TopicItemWidget extends StatelessWidget {
9+
const TopicItemWidget({required this.topic, super.key});
10+
11+
final Topic topic;
12+
13+
@override
14+
Widget build(BuildContext context) {
15+
return ListTile(
16+
title: Text(topic.name),
17+
subtitle: topic.description.isNotEmpty
18+
? Text(
19+
topic.description,
20+
maxLines: 2,
21+
overflow: TextOverflow.ellipsis,
22+
)
23+
: null,
24+
onTap: () {
25+
context.push(
26+
Routes.topicDetails,
27+
extra: EntityDetailsPageArguments(entity: topic),
28+
);
29+
},
30+
);
31+
}
32+
}

lib/shared/widgets/headline_tile_image_start.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:ht_main/entity_details/view/entity_details_page.dart';
44
import 'package:ht_main/router/routes.dart';
55
import 'package:ht_shared/ht_shared.dart';
66
import 'package:ht_ui_kit/ht_ui_kit.dart';
7+
import 'package:timeago/timeago.dart' as timeago;
78

89
/// {@template headline_tile_image_start}
910
/// A shared widget to display a headline item with a small image at the start.
@@ -136,8 +137,7 @@ class _HeadlineMetadataRow extends StatelessWidget {
136137

137138
@override
138139
Widget build(BuildContext context) {
139-
// TODO(anyone): Use a proper timeago library.
140-
final formattedDate = headline.createdAt.toString();
140+
final formattedDate = timeago.format(headline.createdAt);
141141

142142
// Use bodySmall for a reasonable base size, with muted accent color
143143
final metadataTextStyle = textTheme.bodySmall?.copyWith(

lib/shared/widgets/headline_tile_image_top.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:ht_main/entity_details/view/entity_details_page.dart';
44
import 'package:ht_main/router/routes.dart';
55
import 'package:ht_shared/ht_shared.dart';
66
import 'package:ht_ui_kit/ht_ui_kit.dart';
7+
import 'package:timeago/timeago.dart' as timeago;
78

89
/// {@template headline_tile_image_top}
910
/// A shared widget to display a headline item with a large image at the top.
@@ -147,8 +148,7 @@ class _HeadlineMetadataRow extends StatelessWidget {
147148

148149
@override
149150
Widget build(BuildContext context) {
150-
// TODO(anyone): Use a proper timeago library.
151-
final formattedDate = headline.createdAt.toString();
151+
final formattedDate = timeago.format(headline.createdAt);
152152

153153
// Use bodySmall for a reasonable base size, with muted accent color
154154
final metadataTextStyle = textTheme.bodySmall?.copyWith(

lib/shared/widgets/headline_tile_text_only.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:ht_main/entity_details/view/entity_details_page.dart';
44
import 'package:ht_main/router/routes.dart';
55
import 'package:ht_shared/ht_shared.dart';
66
import 'package:ht_ui_kit/ht_ui_kit.dart';
7+
import 'package:timeago/timeago.dart' as timeago;
78

89
/// {@template headline_tile_text_only}
910
/// A widget to display a headline item with text only.
@@ -108,8 +109,7 @@ class _HeadlineMetadataRow extends StatelessWidget {
108109

109110
@override
110111
Widget build(BuildContext context) {
111-
// TODO(anyone): Use a proper timeago library.
112-
final formattedDate = headline.createdAt.toString();
112+
final formattedDate = timeago.format(headline.createdAt);
113113

114114
// Use bodySmall for a reasonable base size, with muted accent color
115115
final metadataTextStyle = textTheme.bodySmall?.copyWith(

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ packages:
416416
description:
417417
path: "."
418418
ref: HEAD
419-
resolved-ref: abef81e5294d70ace82d3e87f1efc94fca6a8445
419+
resolved-ref: "7945773edb4251d294071820c4ce1b6332f032ec"
420420
url: "https://github.com/headlines-toolkit/ht-data-inmemory.git"
421421
source: git
422422
version: "0.0.0"

0 commit comments

Comments
 (0)