Skip to content

Commit 2177cea

Browse files
authored
Merge pull request #53 from flutter-news-app-full-source-code/dashboard-content-management-state-sync
Dashboard content management state sync
2 parents b4f0f0b + a6a4922 commit 2177cea

13 files changed

+41
-17
lines changed

lib/app/view/app.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,11 @@ class App extends StatelessWidget {
112112
),
113113
BlocProvider(
114114
create: (context) => DashboardBloc(
115-
dashboardSummaryRepository: context
116-
.read<DataRepository<DashboardSummary>>(),
115+
dashboardSummaryRepository:
116+
context.read<DataRepository<DashboardSummary>>(),
117117
headlinesRepository: context.read<DataRepository<Headline>>(),
118+
topicsRepository: context.read<DataRepository<Topic>>(),
119+
sourcesRepository: context.read<DataRepository<Source>>(),
118120
),
119121
),
120122
],

lib/content_management/view/archived_sources_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ class _ArchivedSourcesView extends StatelessWidget {
4545
context.read<ContentManagementBloc>().add(
4646
const LoadSourcesRequested(limit: kDefaultRowsPerPage),
4747
);
48-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
4948
}
5049
},
5150
child: BlocBuilder<ArchivedSourcesBloc, ArchivedSourcesState>(

lib/content_management/view/archived_topics_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ class _ArchivedTopicsView extends StatelessWidget {
4545
context
4646
.read<ContentManagementBloc>()
4747
.add(const LoadTopicsRequested(limit: kDefaultRowsPerPage));
48-
context.read<DashboardBloc>().add( DashboardSummaryLoaded());
4948
}
5049
},
5150
child: BlocBuilder<ArchivedTopicsBloc, ArchivedTopicsState>(

lib/content_management/view/create_headline_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ class _CreateHeadlineViewState extends State<_CreateHeadlineView> {
8989
// Refresh the list to show the new headline
9090
const LoadHeadlinesRequested(limit: kDefaultRowsPerPage),
9191
);
92-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
9392
context.pop();
9493
}
9594
if (state.status == CreateHeadlineStatus.failure) {

lib/content_management/view/create_source_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ class _CreateSourceViewState extends State<_CreateSourceView> {
8989
// Refresh the list to show the new source
9090
const LoadSourcesRequested(limit: kDefaultRowsPerPage),
9191
);
92-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
9392
context.pop();
9493
}
9594
if (state.status == CreateSourceStatus.failure) {

lib/content_management/view/create_topic_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ class _CreateTopicViewState extends State<_CreateTopicView> {
8686
// Refresh the list to show the new topic
8787
const LoadTopicsRequested(limit: kDefaultRowsPerPage),
8888
);
89-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
9089
context.pop();
9190
}
9291
if (state.status == CreateTopicStatus.failure) {

lib/content_management/view/edit_headline_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ class _EditHeadlineViewState extends State<_EditHeadlineView> {
117117
context.read<ContentManagementBloc>().add(
118118
const LoadHeadlinesRequested(limit: kDefaultRowsPerPage),
119119
);
120-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
121120
context.pop();
122121
}
123122
if (state.status == EditHeadlineStatus.failure) {

lib/content_management/view/edit_source_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ class _EditSourceViewState extends State<_EditSourceView> {
114114
context.read<ContentManagementBloc>().add(
115115
const LoadSourcesRequested(limit: kDefaultRowsPerPage),
116116
);
117-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
118117
context.pop();
119118
}
120119
if (state.status == EditSourceStatus.failure) {

lib/content_management/view/edit_topic_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ class _EditTopicViewState extends State<_EditTopicView> {
111111
context.read<ContentManagementBloc>().add(
112112
const LoadTopicsRequested(limit: kDefaultRowsPerPage),
113113
);
114-
context.read<DashboardBloc>().add(DashboardSummaryLoaded());
115114
context.pop();
116115
}
117116
if (state.status == EditTopicStatus.failure) {

lib/dashboard/bloc/dashboard_bloc.dart

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import 'dart:async';
2+
13
import 'package:bloc/bloc.dart';
24
import 'package:core/core.dart';
35
import 'package:data_repository/data_repository.dart';
46
import 'package:equatable/equatable.dart';
7+
import 'package:stream_transform/stream_transform.dart';
58

69
part 'dashboard_event.dart';
710
part 'dashboard_state.dart';
@@ -12,17 +15,39 @@ class DashboardBloc extends Bloc<DashboardEvent, DashboardState> {
1215
DashboardBloc({
1316
required DataRepository<DashboardSummary> dashboardSummaryRepository,
1417
required DataRepository<Headline> headlinesRepository,
18+
required DataRepository<Topic> topicsRepository,
19+
required DataRepository<Source> sourcesRepository,
1520
}) : _dashboardSummaryRepository = dashboardSummaryRepository,
1621
_headlinesRepository = headlinesRepository,
1722
super(const DashboardState()) {
18-
on<DashboardSummaryLoaded>(_onDashboardSummaryLoaded);
23+
on<DashboardSummaryRequested>(_onDashboardSummaryRequested);
24+
on<_DashboardEntityUpdated>(_onDashboardEntityUpdated);
25+
26+
_entityUpdatedSubscription = headlinesRepository.entityUpdated
27+
.merge(topicsRepository.entityUpdated)
28+
.merge(sourcesRepository.entityUpdated)
29+
.listen((_) => add(const _DashboardEntityUpdated()));
1930
}
2031

2132
final DataRepository<DashboardSummary> _dashboardSummaryRepository;
2233
final DataRepository<Headline> _headlinesRepository;
34+
late final StreamSubscription<void> _entityUpdatedSubscription;
35+
36+
@override
37+
Future<void> close() {
38+
_entityUpdatedSubscription.cancel();
39+
return super.close();
40+
}
41+
42+
void _onDashboardEntityUpdated(
43+
_DashboardEntityUpdated event,
44+
Emitter<DashboardState> emit,
45+
) {
46+
add(DashboardSummaryRequested());
47+
}
2348

24-
Future<void> _onDashboardSummaryLoaded(
25-
DashboardSummaryLoaded event,
49+
Future<void> _onDashboardSummaryRequested(
50+
DashboardSummaryRequested event,
2651
Emitter<DashboardState> emit,
2752
) async {
2853
emit(state.copyWith(status: DashboardStatus.loading));

0 commit comments

Comments
 (0)