@@ -60,6 +60,13 @@ class HomeBloc implements BaseBloc {
6060 final retryNextPageController = PublishSubject <void >();
6161 final retryFirstPageController = PublishSubject <void >();
6262 final toggleFavoritedController = PublishSubject <String >();
63+ final controllers = [
64+ queryController,
65+ loadNextPageController,
66+ retryNextPageController,
67+ retryFirstPageController,
68+ toggleFavoritedController,
69+ ];
6370
6471 /// Debounce query stream
6572 final searchString$ = queryController
@@ -124,51 +131,26 @@ class HomeBloc implements BaseBloc {
124131 ),
125132 ).publishValueSeededDistinct (seedValue: HomePageState .initial ());
126133
127- final message$ = toggleFavoritedController
128- .groupBy ((id) => id)
129- .map ((group$) => group$.throttleTime (Duration (milliseconds: 600 )))
130- .flatMap ((group$) => group$)
131- .asyncExpand ((id) => Stream .fromFuture (sharedPref.toggleFavorite (id)))
132- .withLatestFrom (
133- state$,
134- (result, HomePageState item) => HomePageMessage .fromResult (
135- result,
136- item.books.firstWhere (
137- (book) => book.id == result.id,
138- orElse: () => null ,
139- ),
140- ),
141- )
142- .publish ();
134+ final message$ =
135+ _getMessage$ (toggleFavoritedController, sharedPref, state$);
143136
144137 final favoriteCount$ = sharedPref.favoritedIds$
145138 .map ((ids) => ids.length)
146139 .publishValueSeededDistinct (seedValue: 0 );
147140
148- /// DisposeBag
149- final bag = DisposeBag (
150- [
151- queryController,
152- loadNextPageController,
153- retryNextPageController,
154- retryFirstPageController,
155- toggleFavoritedController,
156- //
141+ return HomeBloc ._(
142+ queryController.add,
143+ () => loadNextPageController.add (null ),
144+ state$,
145+ DisposeBag ([
146+ ...controllers,
157147 message$.listen ((message) => print ('[MESSAGE] $message ' )),
158148 favoriteCount$.listen ((count) => print ('[FAV_COUNT] $count ' )),
159149 state$.listen ((state) => print ('[STATE] $state ' )),
160- //
161150 state$.connect (),
162151 message$.connect (),
163152 favoriteCount$.connect (),
164- ],
165- );
166-
167- return HomeBloc ._(
168- queryController.add,
169- () => loadNextPageController.add (null ),
170- state$,
171- bag.dispose,
153+ ]).dispose,
172154 () => retryNextPageController.add (null ),
173155 () => retryFirstPageController.add (null ),
174156 toggleFavoritedController.add,
@@ -178,6 +160,29 @@ class HomeBloc implements BaseBloc {
178160 }
179161}
180162
163+ ConnectableStream <HomePageMessage > _getMessage$ (
164+ PublishSubject <String > toggleFavoritedController,
165+ SharedPref sharedPref,
166+ DistinctValueConnectableStream <HomePageState > state$,
167+ ) {
168+ return toggleFavoritedController
169+ .groupBy ((id) => id)
170+ .map ((group$) => group$.throttleTime (Duration (milliseconds: 600 )))
171+ .flatMap ((group$) => group$)
172+ .asyncExpand ((id) => Stream .fromFuture (sharedPref.toggleFavorite (id)))
173+ .withLatestFrom (
174+ state$,
175+ (result, HomePageState item) => HomePageMessage .fromResult (
176+ result,
177+ item.books.firstWhere (
178+ (book) => book.id == result.id,
179+ orElse: () => null ,
180+ ),
181+ ),
182+ )
183+ .publish ();
184+ }
185+
181186/// Process [intent] , convert [intent] to [Stream] of [PartialStateChange] s
182187Stream <PartialStateChange > _processIntent$ (
183188 HomeIntent intent,
0 commit comments