package Ġcom . zt ind . mv vm . view model Ċ Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . zt ind . mv vm . common . utils . Common Util Ċ import Ġcom . zt ind . mv vm . common . utils . State Ċ import Ġcom . zt ind . mv vm . common . utils . State Type Ċ import Ġcom . zt ind . mv vm . repository . Base Repository Ċ Ċ /** Ċ Ġ* ĠViewModel åŁº ç±» Ċ Ġ* Ġåľ¨ åħ¶ åĨħéĥ¨ åĪĿå§ĭåĮĸ Model å®ŀä¾ĭ Ċ Ġ* Ġ åħ¶ åŃĲ ç±» å®ļä¹ī å¯¹ Coroutine åįı ç¨ĭ åĴĮ LiveData çļĦ èµĭåĢ¼ æĵįä½ľ çļĦ åħ·ä½ĵ å®ŀçİ° Ċ Ġ* Ċ Ġ* Ġview model éĩĮ æĮģ æľī ï¼ļ å® ¿ ä¸» Activity / Fragment ï¼Į D atab ind ing , Re position å®ŀä¾ĭ ä¸ī åī ĳ å®¢ Ċ Ġ*/ Ċ abstract Ġclass ĠBase ViewModel < R Ġ: ĠBase Repository , DB : ViewData Binding >: ĠViewModel (){ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġview model çļĦ Repository ĊĠĠĠĠ Ġ* ĠéĢļè¿ĩ åıį å°Ħ æ³¨ åħ¥ R å®ŀä¾ĭ ï¼Ī å®ŀä¾ĭ class å¯¹è±¡ è°ĥçĶ¨ åħ¶ æŀĦéĢł æĸ¹æ³ķ å®ŀä¾ĭ åĮĸ å¯¹è±¡ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġm Repository Ġ: ĠR Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å¯¹åºĶ Repository å®ŀä¾ĭ ĊĠĠĠĠĠĠĠ Ġ( Common Util . getClass < R >( this )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æŀĦéĢł åĩ½æķ° çļĦ æŀĦéĢł åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDeclared Constructor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĽå»º å®ŀä¾ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġview model å® ¿ ä¸» Activity / Fragment , åŃĲ ç±» çĶ¨ æĹ¶ éľĢè¦ģ å¼º åĪ¶ è½¬ åĮĸ ä¸º å¯¹äºİ çļĦ Activity / Fragment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġm Lifecycle Owner Ġby Ġlazy { ĊĠĠĠĠĠĠĠ Ġm Binding . lifecycle Owner ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġview model å® ¿ ä¸» Activity / Fragment æīĢ ç»ĳ å®ļçļĦ databinding ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġlateinit Ġvar Ġm Binding Ġ: ĠDB ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ vm çļĦ view åĴĮ data ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġgoto Init (){ ĊĠĠĠĠĠĠĠ Ġ// åħ¨å±Ģ ç½ĳç»ľ è¯·æ±Ĥ çĬ¶æĢģ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠ Ġload State . observe ( m Lifecycle Owner !! , observer ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¸ĥå±Ģ çĽ¸åħ³ view æķ° åĢ¼ åĪĿå§ĭåĮĸ ï¼Į çĽĳåĲ¬ äºĭä»¶ æ³¨åĨĮ ï¼Į ä¸ĢäºĽ å·¥åħ· ç±» æĪĲåĳĺ åĪĿå§ĭåĮĸ éĥ½ åı¯ åľ¨ æŃ¤ æĸ¹æ³ķ ä¸Ń è¿Ľè¡Į å®ŀçİ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġinit View () ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ æķ°æį® ï¼Į æİ¥åı£ è¯·æ±Ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġinit Data () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUI åĬłè½½ çļĦ åħ¨å±Ģ çĬ¶æĢģ å°ģè£ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġload State Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < State >() ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ åıĳ åºĶçĶ¨ çĬ¶æĢģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġobserver Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠObserver < State >{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState Type . LOADING Ġ-> Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState Type . SUCCESS Ġ-> Ġshow Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState Type . ERROR Ġ-> Ġshow Error ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState Type . EMPTY Ġ-> Ġshow Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// åħ¨å±Ģ ui æĵįä½ľ å¤ĦçĲĨ ĊĠĠĠ Ġopen Ġfun Ġshow Loading () Ġ{ ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġopen Ġfun Ġshow Success () Ġ{ ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġopen Ġfun Ġshow Error ( msg : ĠString ) Ġ{ ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġopen Ġfun Ġshow Empty () Ġ{ ĊĊĠĠĠ Ġ} Ċ } Ċ