package Ġde . sch net t ler . sc ro bb ler . core . ui . view model Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . dropbox . android . external . store 4 . Store Ċ import Ġde . sch net t ler . sc ro bb ler . core . k tx . fresh From Ċ import Ġde . sch net t ler . sc ro bb ler . core . k tx . stream From Ċ import Ġde . sch net t ler . sc ro bb ler . core . ui . state . Refresh able Ui State Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . launch Ċ Ċ open Ġclass ĠRefresh able State ViewModel < Key Ġ: ĠAny , ĠState Type Ġ: ĠAny , ĠOutput Ġ: ĠState Type >( ĊĠĠĠ Ġprivate Ġval Ġstore : ĠStore < Key , ĠOutput >, ĊĠĠĠ Ġprivate Ġval Ġkey : ĠKey Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġstate : ĠMutable State Flow < Refresh able Ui State < State Type >> Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable State Flow ( Refresh able Ui State . Success ( data Ġ= Ġnull , Ġloading Ġ= Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġstreaming : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRef res hes ĠData ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . fresh From ( store , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġto Ġstream Ġdata , Ġif Ġnot Ġstreaming Ġyet . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Stream () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! streaming ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstreaming Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . stream From ( store , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }