package Ġcom . w lm . mv vm demo . view model Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . w lm . base lib . base . Base ViewModel Ċ import Ġcom . w lm . base lib . net . execute Response Ċ import Ġcom . w lm . mv vm demo . bean . Article List Ċ import Ġcom . w lm . mv vm demo . repository . Square Repository Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠSquare ViewModel Ġ: ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsquare Repository Ġby Ġlazy Ġ{ ĠSquare Repository () Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġsquare Ui State Ġ= ĠMutable LiveData < Square Ui State >() ĊĊĠĠĠ Ġfun Ġget Square Article List ( is Refresh : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġemit Ui State ( show Loading Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Refresh ) ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Catch ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsquare Repository . get Square Article List ( currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Response ( result , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle List Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( article List . offset Ġ>= Ġarticle List . total ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Ui State ( show End Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Ui State ( show Success Ġ= Ġarticle List , Ġis Refresh Ġ= Ġis Refresh ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Ui State ( show Error Ġ= Ġresult . error Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġhandle Cancellation Exception Man ually Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġemit Ui State ( ĊĠĠĠĠĠĠĠ Ġshow Loading : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġshow Error : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshow Success : ĠArticle List ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshow End : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġis Refresh : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġneed Login : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsquare Ui State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSquare Ui State ( show Loading , Ġshow Error , Ġshow Success , Ġshow End , Ġis Refresh , Ġneed Login ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠSquare Ui State ( ĊĠĠĠĠĠĠĠ Ġval Ġshow Loading : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġshow Error : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġshow Success : ĠArticle List ?, ĊĠĠĠĠĠĠĠ Ġval Ġshow End : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġis Refresh : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġneed Login : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } ĊĊ