1
+ import 'dart:async' ;
2
+
1
3
import 'package:bloc/bloc.dart' ;
2
4
import 'package:core/core.dart' ;
3
5
import 'package:data_repository/data_repository.dart' ;
4
6
import 'package:equatable/equatable.dart' ;
7
+ import 'package:stream_transform/stream_transform.dart' ;
5
8
6
9
part 'dashboard_event.dart' ;
7
10
part 'dashboard_state.dart' ;
@@ -12,14 +15,36 @@ class DashboardBloc extends Bloc<DashboardEvent, DashboardState> {
12
15
DashboardBloc ({
13
16
required DataRepository <DashboardSummary > dashboardSummaryRepository,
14
17
required DataRepository <Headline > headlinesRepository,
15
- }) : _dashboardSummaryRepository = dashboardSummaryRepository,
16
- _headlinesRepository = headlinesRepository,
17
- super (const DashboardState ()) {
18
+ required DataRepository <Topic > topicsRepository,
19
+ required DataRepository <Source > sourcesRepository,
20
+ }) : _dashboardSummaryRepository = dashboardSummaryRepository,
21
+ _headlinesRepository = headlinesRepository,
22
+ super (const DashboardState ()) {
18
23
on < DashboardSummaryLoaded > (_onDashboardSummaryLoaded);
24
+ on < _DashboardEntityUpdated > (_onDashboardEntityUpdated);
25
+
26
+ _entityUpdatedSubscription = headlinesRepository.entityUpdated
27
+ .merge (topicsRepository.entityUpdated)
28
+ .merge (sourcesRepository.entityUpdated)
29
+ .listen ((_) => add (const _DashboardEntityUpdated ()));
19
30
}
20
31
21
32
final DataRepository <DashboardSummary > _dashboardSummaryRepository;
22
33
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 (DashboardSummaryLoaded ());
47
+ }
23
48
24
49
Future <void > _onDashboardSummaryLoaded (
25
50
DashboardSummaryLoaded event,
0 commit comments