/* Ċ Ġ* ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 - 2 0 2 1 ĠD mit ri y ĠG or bun ov Ġ( d mit ri y . goto @ gmail . com ) Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġme . dm dev . pre mo . sample Ċ Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . save able . remember Save able State Holder Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġme . dm dev . pre mo . Presentation Model Ċ import Ġme . dm dev . pre mo . State Ċ import Ġme . dm dev . pre mo . navigation . Pm Stack Change Ċ Ċ @ Composable Ċ fun Ġ< T > ĠState < T >. bind (): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġflow (). collect As State (). value Ċ } Ċ Ċ @ Composable Ċ fun Ġ< T > ĠFlow < T >. bind (): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġcollect As State ( null ). value Ċ } Ċ Ċ @ Composable Ċ fun Ġ< T > ĠFlow < T >. bind ( initial Value : ĠT ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġcollect As State ( initial Value ). value Ċ } Ċ Ċ @ Composable Ċ fun Ġnavigation ( ĊĠĠĠ Ġpm Stack Change : ĠP m Stack Change , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġcontent : Ġ@ Composable Ġ( Presentation Model ?) Ġ-> ĠUnit Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġstate Holder Ġ= Ġremember Save able State Holder () ĊĊĠĠĠ Ġval Ġpm Ġ= Ġwhen Ġ( pm Stack Change ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠP m Stack Change . Push Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Holder . remove State ( pm Stack Change . enter Pm . tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpm Stack Change . enter Pm ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠP m Stack Change . Pop Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Holder . remove State ( pm Stack Change . exit Pm . tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpm Stack Change . enter Pm ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠP m Stack Change . Set Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpm Stack Change . pm ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠP m Stack Change . Empty Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠBox ( modifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Holder . Save able State Provider ( pm ?. tag Ġ?: Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ( pm ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }