Skip to content

Commit 4da6ac0

Browse files
committed
refactor: use generic data repository
- Replaced specific repository - Used shared Headline model - Updated exception handling
1 parent db19d19 commit 4da6ac0

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

lib/headline-details/bloc/headline_details_bloc.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
11
import 'dart:async'; // Ensure async is imported
22

33
import 'package:bloc/bloc.dart';
4-
import 'package:ht_headlines_client/ht_headlines_client.dart'; // Import for Headline and Exceptions
5-
import 'package:ht_headlines_repository/ht_headlines_repository.dart';
4+
import 'package:ht_data_repository/ht_data_repository.dart'; // Generic Data Repository
5+
import 'package:ht_shared/ht_shared.dart'
6+
show
7+
Headline,
8+
HtHttpException,
9+
NotFoundException; // Shared models and standardized exceptions
610

711
part 'headline_details_event.dart';
812
part 'headline_details_state.dart';
913

1014
class HeadlineDetailsBloc
1115
extends Bloc<HeadlineDetailsEvent, HeadlineDetailsState> {
12-
HeadlineDetailsBloc({required HtHeadlinesRepository headlinesRepository})
16+
HeadlineDetailsBloc({required HtDataRepository<Headline> headlinesRepository})
1317
: _headlinesRepository = headlinesRepository,
1418
super(HeadlineDetailsInitial()) {
1519
on<HeadlineDetailsRequested>(_onHeadlineDetailsRequested);
1620
}
1721

18-
final HtHeadlinesRepository _headlinesRepository;
22+
final HtDataRepository<Headline> _headlinesRepository;
1923

2024
Future<void> _onHeadlineDetailsRequested(
2125
HeadlineDetailsRequested event,
2226
Emitter<HeadlineDetailsState> emit,
2327
) async {
2428
emit(HeadlineDetailsLoading());
2529
try {
26-
final headline = await _headlinesRepository.getHeadline(
27-
id: event.headlineId,
28-
);
29-
emit(HeadlineDetailsLoaded(headline: headline!));
30-
} on HeadlineNotFoundException catch (e) {
30+
final headline = await _headlinesRepository.read(id: event.headlineId);
31+
emit(HeadlineDetailsLoaded(headline: headline));
32+
} on NotFoundException catch (e) {
3133
emit(HeadlineDetailsFailure(message: e.message));
32-
} on HeadlinesFetchException catch (e) {
34+
} on HtHttpException catch (e) {
3335
emit(HeadlineDetailsFailure(message: e.message));
3436
} catch (e) {
3537
emit(HeadlineDetailsFailure(message: 'An unexpected error occurred: $e'));

lib/headline-details/view/headline_details_page.dart

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33

44
import 'package:flutter/material.dart';
55
import 'package:flutter_bloc/flutter_bloc.dart';
6-
import 'package:ht_headlines_client/ht_headlines_client.dart';
76
import 'package:ht_main/headline-details/bloc/headline_details_bloc.dart';
87
import 'package:ht_main/l10n/l10n.dart';
98
import 'package:ht_main/shared/shared.dart';
9+
import 'package:ht_shared/ht_shared.dart'
10+
show Headline; // Import Headline model
1011
import 'package:intl/intl.dart';
1112
import 'package:url_launcher/url_launcher_string.dart';
1213

@@ -265,22 +266,20 @@ class HeadlineDetailsPage extends StatelessWidget {
265266
);
266267
}
267268

268-
// Country Chip
269-
if (headline.eventCountry != null) {
270-
// Use country.flagUrl for the avatar
269+
// Country Chip (from Source Headquarters)
270+
if (headline.source?.headquarters != null) {
271+
final country = headline.source!.headquarters!;
271272
chips.add(
272273
Chip(
273274
avatar: CircleAvatar(
274-
// Use CircleAvatar for better image display
275-
radius: chipAvatarSize / 2, // Adjust radius as needed
276-
backgroundColor: Colors.transparent, // Avoid background color clash
277-
backgroundImage: NetworkImage(headline.eventCountry!.flagUrl),
275+
radius: chipAvatarSize / 2,
276+
backgroundColor: Colors.transparent,
277+
backgroundImage: NetworkImage(country.flagUrl),
278278
onBackgroundImageError: (exception, stackTrace) {
279279
// Optional: Handle image loading errors, e.g., show placeholder
280280
},
281281
),
282-
// Use eventCountry.name
283-
label: Text(headline.eventCountry!.name),
282+
label: Text(country.name),
284283
labelStyle: chipLabelStyle,
285284
backgroundColor: chipBackgroundColor,
286285
padding: chipPadding,

0 commit comments

Comments
 (0)