package Ġcom . hu ying ba o . core . arch . action Ċ Ċ import Ġcom . hu ying ba o . core . arch . dispatcher . Flux Dispatcher Ċ import Ġcom . hu ying ba o . core . arch . model . Action Ċ import Ġcom . hu ying ba o . core . arch . model . Change Ċ import Ġcom . hu ying ba o . core . arch . model . Error Ċ import Ġcom . hu ying ba o . core . arch . model . Loading Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġorg . green robot . event bus . Bus Event Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġjava . util . logging . Level ĊĊ Ċ /** Ċ Ġ* Ġ å®ŀçİ° [ com . hu ying ba o . core . arch . view . Flux View ] ä¸Ń è°ĥçĶ¨ çļĦ äº¤ äºĴ æĸ¹æ³ķ ãĢĤ Ċ Ġ* Ċ Ġ* ĠåĪĽå»º [ Action ] ï¼Į çĽ´æİ¥ åıĳéĢģ ç»Ļ [ com . hu ying ba o . core . arch . store . Flux Store ] ãĢĤ Ċ Ġ* Ċ Ġ* ĠåĪĽå»º [ Change ] ãĢģ[ Loading ] ãĢģ[ Error ] ï¼Į çĽ´æİ¥ åıĳéĢģ ç»Ļ [ com . hu ying ba o . core . arch . view . Flux View ] ãĢĤ Ċ Ġ* Ċ Ġ* Ġ ç±»ä¼¼ M VP æ¨¡å¼ı ä¸ŃçļĦ Presenter ï¼Į åıªæĺ¯ æĸ¹æ³ķ æī§è¡Į å®ĮæĪĲ æ²¡æľī åĽŀè°ĥ æĸ¹æ³ķ ãĢĤ Ċ Ġ* Ċ Ġ* ĠCreated Ġby Ġli uj un f eng Ġon Ġ 2 0 2 0 / 8 / 1 . Ċ Ġ*/ Ċ abstract Ġclass ĠFlux Action Creator Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º æĸ°çļĦ [ Action ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtag Ġ Ġtag å¯¹åºĶ åħ·ä½ĵ æĺ¯ ä»Ģä¹Ī æł· çļĦæĸ¹æ³ķ ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġåı¯ åıĺ éķ¿åº¦ åıĤæķ° ï¼Į éĶ® åĢ¼ å¯¹ åŀĭ çļĦåıĤæķ° pair - value ( String - Object )) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġnew Action ( tag : ĠString , Ġvar arg Ġdata : ĠAny ): ĠAction Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( data . size Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ Ġ" Data Ġmust Ġbe Ġa Ġvalid Ġlist Ġof Ġkey , value Ġpairs " Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġaction Builder Ġ= ĠAction . Builder ( tag ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġdata [ i ++] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġdata [ i ++] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Builder . put ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaction Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Flux Action Manager ] æĺ¯åĲ¦ å·² åŃĺåľ¨ [ Action ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhas Action ( action : ĠAction ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFlux Action Manager . contains ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Flux Action Manager ] æ·»åĬł [ Action ] åĴĮ [ Job ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Action ( action : ĠAction , Ġjob : ĠJob ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFlux Action Manager . add ( action , Ġjob ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Flux Action Manager ] ç§»éĻ¤ [ Action ] ï¼Į åģľæŃ¢ å¯¹åºĶçļĦ [ Job ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġremove Action ( action : ĠAction ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFlux Action Manager . remove ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åħ³èģĶ [ Action ] ä¸İ [ Job ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcan Show Loading Ġtrue : æľī è¿Ľ åº¦ æĺ¾ç¤º , false : æĹł è¿Ľ åº¦ æĺ¾ç¤º ĊĠĠĠĠ Ġ* Ġ@ param Ġcan Retry ĠĠĠĠĠĠ Ġtrue : æĵįä½ľ å¼Ĥå¸¸ åı¯ éĩį è¯ķ , false : æĵįä½ľ å¼Ĥå¸¸ æĬĽ å¼Ĥå¸¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġpost Action ( ĊĠĠĠĠĠĠĠ Ġaction : ĠAction , ĊĠĠĠĠĠĠĠ Ġflow : ĠFlow < T >, ĊĠĠĠĠĠĠĠ Ġcan Show Loading : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcan Retry : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Action ( action )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġflow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĮĩå®ļ IO çº¿ç¨ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . IO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è°ĥçĶ¨ å¼Ģå§ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onStart Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Show Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åıĳéĢģ Loading ( æĺ¾ç¤º ) äºĭä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Loading ( action , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæĵ įä½ľ è¿Ľè¡Į ä¸Ń ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . set Response ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlux Dispatcher . post Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è°ĥçĶ¨ ç»ĵæĿŁ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Show Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åıĳéĢģ Loading ( æ¶Ī å¤± ) äºĭä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Loading ( action , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç§»éĻ¤ äºĭä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æį ķ èİ· å¼Ĥå¸¸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæĵ įä½ľ å¼Ĥå¸¸ ï¼Į æīĵåį° éĶĻè¯¯ æĹ¥å¿Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). logger . log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLevel . SEVERE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Action Creator ĠonError :${ it . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Retry ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Retry ( action , Ġt , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Error ( action , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Action ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĮĩå®ļ ä¸» çº¿ç¨ĭ æī§è¡Į collect æĵįä½ľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( Main Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ·»åĬł Job åĪ° action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( action , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼ĤæŃ¥ æī§è¡Į ï¼Į æĪĲåĬŁ åıĳéĢģ [ Action ] ï¼Į å¼Ĥå¸¸ åıĳéĢģ [ Error ] ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġ< T > Ġpost Http Action ( ĊĠĠĠĠĠĠĠ Ġaction : ĠAction , ĊĠĠĠĠĠĠĠ Ġflow : ĠFlow < T > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost Action ( action , Ġflow , Ġcan Show Loading Ġ= Ġfalse , Ġcan Retry Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼ĤæŃ¥ æī§è¡Į ï¼Į æĪĲåĬŁ åıĳéĢģ [ Action ] ï¼Į å¼Ĥå¸¸ åıĳéĢģ [ Error ] ãĢĤ ĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ ç»ĵæĿŁ åıĳéĢģ [ Loading ] ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġ< T > Ġpost Http Loading Action ( action : ĠAction , Ġflow : ĠFlow < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġpost Action ( action , Ġflow , Ġcan Show Loading Ġ= Ġtrue , Ġcan Retry Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Flux Dispatcher ] åıĳéĢģ [ Change ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġpost Change ( change : ĠChange ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFlux Dispatcher . post Change ( change ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Flux Dispatcher ] åıĳéĢģ [ Loading ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠisLoading Ġtrue : æĺ¾ç¤º ï¼Į false : æ¶Ī å¤± ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġpost Loading ( bus Event : ĠBus Event , ĠisLoading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFlux Dispatcher . post Loading ( Loading . newInstance ( bus Event , ĠisLoading )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Flux Dispatcher ] åıĳéĢģ [ Error ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġpost Error ( bus Event : ĠBus Event , Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFlux Dispatcher . post Error ( Error . newInstance ( bus Event , Ġthrowable )) ĊĠĠĠ Ġ} Ċ } Ċ