package Ġcom . android . mar vel . services . util . character List Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . android . mar vel . domain . use _ cases . Character User Case Ċ import Ġcom . android . mar vel . domain . use _ cases . Search Characters UseCase Ċ import Ġcom . android . mar vel . services . util . Response Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠCharacter ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcharacters UseCase : ĠCharacter User Case , ĊĠĠĠ Ġprivate Ġval Ġsearch Characters UseCase : ĠSearch Characters UseCase Ċ ): ĠViewModel (){ ĊĠĠĠ Ġprivate Ġval Ġmar vel Value Ġ= ĠMutable State Flow ( Mar vel List State ()) ĊĠĠĠ Ġvar Ġ_ mar vel Value : ĠState Flow < Mar vel List State > Ġ= Ġmar vel Value ĊĊĠĠĠ Ġfun ĠgetAll Characters Data ( offset : Int ) Ġ= ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcharacters UseCase ( offset Ġ= Ġoffset ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Success Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Value . value Ġ= ĠMar vel List State ( character List Ġ= Ġit . data ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Loading Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Value . value Ġ= ĠMar vel List State ( isLoading Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Error Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Value . value Ġ= ĠMar vel List State ( error Ġ= Ġit . message ? :" An Ġunexpected Ġerror Ġoc urred .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Se ar ched Character Data ( search : String )= viewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Characters UseCase . invoke ( search Ġ= Ġsearch ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Success Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Value . value Ġ= ĠMar vel List State ( character List Ġ= Ġit . data ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Loading Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Value . value Ġ= ĠMar vel List State ( isLoading Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Error Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Value . value Ġ= ĠMar vel List State ( error Ġ= Ġit . message ? :" An Ġunexpected Ġerror Ġoc urred .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }