Skip to content

Commit bbaab62

Browse files
committed
feat(dashboard): enhances the DashboardBloc to fetch additional data for a richer user experience.
- The DashboardState now includes a recentHeadlines property to store a list of the latest headlines. - The DashboardBloc has been updated to inject the HtDataRepository<Headline>. - The data loading logic now fetches both the DashboardSummary and the 5 most recent headlines concurrently using Future.wait for improved performance. - The DashboardBloc provider in app.dart has been updated to supply the newly required headlinesRepository. This prepares the business logic layer to provide all necessary data for the enhanced dashboard UI.
1 parent 3dbf219 commit bbaab62

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

lib/app/view/app.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,9 @@ class App extends StatelessWidget {
105105
),
106106
BlocProvider(
107107
create: (context) => DashboardBloc(
108-
dashboardSummaryRepository: context
109-
.read<HtDataRepository<DashboardSummary>>(),
108+
dashboardSummaryRepository:
109+
context.read<HtDataRepository<DashboardSummary>>(),
110+
headlinesRepository: context.read<HtDataRepository<Headline>>(),
110111
),
111112
),
112113
],

lib/dashboard/bloc/dashboard_bloc.dart

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,39 @@ class DashboardBloc extends Bloc<DashboardEvent, DashboardState> {
1111
/// {@macro dashboard_bloc}
1212
DashboardBloc({
1313
required HtDataRepository<DashboardSummary> dashboardSummaryRepository,
14+
required HtDataRepository<Headline> headlinesRepository,
1415
}) : _dashboardSummaryRepository = dashboardSummaryRepository,
16+
_headlinesRepository = headlinesRepository,
1517
super(const DashboardState()) {
1618
on<DashboardSummaryLoaded>(_onDashboardSummaryLoaded);
1719
}
1820

1921
final HtDataRepository<DashboardSummary> _dashboardSummaryRepository;
22+
final HtDataRepository<Headline> _headlinesRepository;
2023

2124
Future<void> _onDashboardSummaryLoaded(
2225
DashboardSummaryLoaded event,
2326
Emitter<DashboardState> emit,
2427
) async {
2528
emit(state.copyWith(status: DashboardStatus.loading));
2629
try {
27-
// The dashboard summary is a singleton-like resource, fetched by a
28-
// well-known ID.
29-
final summary = await _dashboardSummaryRepository.read(id: 'summary');
30+
// Fetch summary and recent headlines concurrently
31+
final [summaryResponse, recentHeadlinesResponse] = await Future.wait([
32+
_dashboardSummaryRepository.read(id: 'summary'),
33+
_headlinesRepository.readAllByQuery(
34+
const {'sortBy': 'createdAt', 'sortOrder': 'desc'},
35+
limit: 5,
36+
),
37+
]);
38+
39+
final summary = summaryResponse as DashboardSummary;
40+
final recentHeadlines =
41+
(recentHeadlinesResponse as PaginatedResponse<Headline>).items;
3042
emit(
3143
state.copyWith(
3244
status: DashboardStatus.success,
3345
summary: summary,
46+
recentHeadlines: recentHeadlines,
3447
),
3548
);
3649
} on HtHttpException catch (e) {

lib/dashboard/bloc/dashboard_state.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,29 @@ final class DashboardState extends Equatable {
2020
const DashboardState({
2121
this.status = DashboardStatus.initial,
2222
this.summary,
23+
this.recentHeadlines = const [],
2324
this.errorMessage,
2425
});
2526

2627
final DashboardStatus status;
2728
final DashboardSummary? summary;
29+
final List<Headline> recentHeadlines;
2830
final String? errorMessage;
2931

3032
DashboardState copyWith({
3133
DashboardStatus? status,
3234
DashboardSummary? summary,
35+
List<Headline>? recentHeadlines,
3336
String? errorMessage,
3437
}) {
3538
return DashboardState(
3639
status: status ?? this.status,
3740
summary: summary ?? this.summary,
41+
recentHeadlines: recentHeadlines ?? this.recentHeadlines,
3842
errorMessage: errorMessage ?? this.errorMessage,
3943
);
4044
}
4145

4246
@override
43-
List<Object?> get props => [status, summary, errorMessage];
47+
List<Object?> get props => [status, summary, recentHeadlines, errorMessage];
4448
}

0 commit comments

Comments
 (0)