package Ġcom . vip ulas ri . jet instagram . data Ċ Ċ import Ġandroidx . compose . runtime . Mutable State Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġcom . vip ulas ri . jet instagram . model . Post Ċ import Ġcom . vip ulas ri . jet instagram . model . User Ċ import Ġcom . vip ulas ri . jet instagram . model . names Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ object ĠPosts Repository Ġ{ ĊĊĠ Ġprivate Ġval Ġposts Ġ= Ġmutable State Of < List < Post >>( emptyList ()) ĊĊĠ Ġprivate Ġfun Ġpopulate Posts () Ġ{ ĊĠĠĠ Ġval Ġ_ posts Ġ= ĠArrayList < Post >() ĊĠĠĠ Ġ( 0 .. 9 ). forEach Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠ Ġval Ġpost Ġ= ĠPost ( ĊĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġindex Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġ" https :// source . unsplash . com / random / 4 0 0 x 3 0 0 ?$ index ", ĊĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġnames [ index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġnames [ index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġ" https :// random user . me / api / por traits / men /${ index Ġ+ Ġ 1 }. jpg " ĊĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠ Ġlikes Count Ġ= Ġindex Ġ+ Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠ Ġcomments Count Ġ= Ġindex Ġ+ Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠ Ġtime Stamp Ġ= ĠSystem . currentTimeMillis () Ġ- Ġ( index Ġ* Ġ 6 0 0 0 0 ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ_ posts . add ( post ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġposts . value Ġ= Ġ_ posts ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġpopulate Posts () ĊĠ Ġ} ĊĊĠ Ġfun Ġobserve Posts (): ĠMutable State < List < Post >> Ġ= Ġposts ĊĊĠ Ġsuspend Ġfun Ġtoggle Like ( post Id : ĠInt ) Ġ{ ĊĠĠĠ Ġupdate Like ( post Id , Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġsuspend Ġfun Ġperform Like ( post Id : ĠInt ) Ġ{ ĊĠĠĠ Ġupdate Like ( post Id , Ġfalse ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġupdate Like ( ĊĠĠĠ Ġpost Id : ĠInt , ĊĠĠĠ Ġis Toggle : ĠBoolean ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠ Ġval Ġ_ posts Ġ= Ġposts . value . to Mutable List () ĊĠĠĠĠĠ Ġfor Ġ(( index , Ġvalue ) Ġin Ġ_ posts . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value . id Ġ== Ġpost Id ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġis Lik ed Ġ= Ġif Ġ( is Toggle ) Ġ! value . is Lik ed Ġelse Ġtrue ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġis Lik ed Ġis Ġsame Ġas Ġprevious Ġstate ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Lik ed Ġ!= Ġvalue . is Lik ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Count Ġ= Ġif Ġ( is Lik ed ) Ġvalue . likes Count . plus ( 1 ) Ġelse Ġvalue . likes Count . minus ( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ posts [ index ] Ġ= Ġvalue . copy ( is Lik ed Ġ= Ġis Lik ed , Ġlikes Count Ġ= Ġlikes Count ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġposts . value Ġ= Ġ_ posts ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ }