/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . runtime . samples Ċ Ċ import Ġandroidx . annotation . Sample d Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . produce State Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . map Ċ Ċ @ Suppress (" UNUSED _ PARAMETER ") Ċ @ Composable Ċ private Ġfun ĠText ( text : ĠString ): ĠUnit Ġ= ĠTODO () Ċ Ċ class ĠPro duce State Sample ViewModel Ġ{ ĊĠĠĠ Ġval Ġpeople : ĠFlow < List < Person >> Ġ= ĠTODO () ĊĊĠĠĠ Ġinterface ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ") ĊĠĠĠ Ġfun Ġregister Person Observer ( observer : Ġ( Person ) Ġ-> ĠUnit ): ĠDis posable Ġ= ĠTODO () Ċ } Ċ Ċ data Ġclass ĠPerson ( val Ġname : ĠString ) Ċ Ċ private Ġsealed Ġclass ĠUi State < out ĠT > Ġ{ ĊĠĠĠ Ġobject ĠLoading Ġ: ĠUi State < Nothing >() ĊĠĠĠ Ġclass ĠData < T >( val Ġdata : ĠT ) Ġ: ĠUi State < T >() Ċ } Ċ Ċ @ Sample d Ċ @ Composable Ċ fun Ġproduce State Sample ( viewModel : ĠPro duce State Sample ViewModel ) Ġ{ ĊĠĠĠ Ġval Ġui State Ġby Ġproduce State < Ui State < List < Person >> >( Ui State . Loading , ĠviewModel ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . people ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠUi State . Data ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġvalue Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhen Ġ( val Ġstate Ġ= Ġui State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠUi State . Loading Ġ-> ĠText (" Loading ...") ĊĠĠĠĠĠĠĠ Ġis ĠUi State . Data Ġ-> ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( person Ġin Ġstate . data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Hello , Ġ${ person . name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" UNUSED _ VARIABLE ") Ċ @ Sample d Ċ @ Composable Ċ fun Ġproduce State Await Dispose Sample ( viewModel : ĠPro duce State Sample ViewModel ) Ġ{ ĊĠĠĠ Ġval Ġcurrent Person Ġby Ġproduce State < Person ? >( null , ĠviewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= ĠviewModel . register Person Observer Ġ{ Ġperson Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġperson ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġawait Dispose Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }