/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" Can Be Val ", Ġ" ClassName ", Ġ" UNUSED _ PARAMETER ", Ġ" unused ") Ċ Ċ package Ġandroidx . compose . integration . docs . ph ases Ċ Ċ import Ġandroidx . compose . foundation . Canvas Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . lazy . Lazy List State Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Mutable State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . layout . on Size Changed Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . Int Offset Ċ import Ġandroidx . compose . ui . unit . dp Ċ Ċ /* Ċ Ġ* ĠThis Ġfile Ġlets ĠDev Rel Ġtrack Ġchanges Ġto Ġsnippets Ġpresent Ġin Ċ Ġ* Ġhttps :// developer . android . com / jet pack / compose / ph ases Ċ Ġ* Ċ Ġ* ĠNo Ġaction Ġrequired Ġif Ġit 's Ġmodified . Ċ Ġ*/ Ċ Ċ @ Composable Ċ private Ġfun ĠState Without Property Delegate () Ġ{ ĊĠĠĠ Ġ// ĠState Ġread Ġwithout Ġproperty Ġdelegate . ĊĠĠĠ Ġval Ġpadding State : ĠMutable State < Dp > Ġ= Ġremember Ġ{ Ġmutable State Of ( 8 . dp ) Ġ} ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Hello ", ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( padding State . value ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠState With Property Delegate () Ġ{ ĊĠĠĠ Ġ// ĠState Ġread Ġwith Ġproperty Ġdelegate . ĊĠĠĠ Ġvar Ġpadding : ĠD p Ġby Ġremember Ġ{ Ġmutable State Of ( 8 . dp ) Ġ} ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Hello ", ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( padding ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠState Read In Composition () Ġ{ ĊĠĠĠ Ġvar Ġpadding Ġby Ġremember Ġ{ Ġmutable State Of ( 8 . dp ) Ġ} ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Hello ", ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġ` padding ` Ġstate Ġis Ġread Ġin Ġthe Ġcomposition Ġphase ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthe Ġmodifier Ġis Ġconstructed . ĊĠĠĠĠĠĠĠ Ġ// ĠChanges Ġin Ġ` padding ` Ġwill Ġinvoke Ġre composition . ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( padding ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠState Read In Layout () Ġ{ ĊĠĠĠ Ġvar Ġoffset X Ġby Ġremember Ġ{ Ġmutable State Of ( 8 . dp ) Ġ} ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Hello ", ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . offset Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġ` offset X ` Ġstate Ġis Ġread Ġin Ġthe Ġplacement Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġof Ġthe Ġlayout Ġphase Ġwhen Ġthe Ġoffset Ġis Ġcalculated . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChanges Ġin Ġ` offset X ` Ġrestart Ġthe Ġlayout . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Offset ( offset X . round To Px (), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠState Read In Drawing ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġcolor Ġby Ġremember Ġ{ Ġmutable State Of ( Color . Red ) Ġ} ĊĠĠĠ ĠCanvas ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġ` color ` Ġstate Ġis Ġread Ġin Ġthe Ġdrawing Ġphase ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthe Ġcanvas Ġis Ġrendered . ĊĠĠĠĠĠĠĠ Ġ// ĠChanges Ġin Ġ` color ` Ġrestart Ġthe Ġdrawing . ĊĠĠĠĠĠĠĠ Ġdraw Rect ( color ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠOptim izing State Reads Composition () Ġ{ ĊĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist State Ġ= Ġremember Lazy List State () ĊĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNon - optimal Ġimplementation ! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . offset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Local Density . current ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠState Ġread Ġof Ġfirst Visible Item Scroll Offset Ġin Ġcomposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( list State . first Visible Item Scroll Offset Ġ/ Ġ 2 ). to Dp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠLazy Column ( state Ġ= Ġlist State ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠOptim izing State Reads Layout () Ġ{ ĊĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist State Ġ= Ġremember Lazy List State () ĊĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . offset Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠState Ġread Ġof Ġfirst Visible Item Scroll Offset Ġin ĠLayout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Offset ( x Ġ= Ġ 0 , Ġy Ġ= Ġlist State . first Visible Item Scroll Offset Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠLazy Column ( state Ġ= Ġlist State ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠIm mediate Re composition () Ġ{ ĊĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage Height Px Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( R . drawable . rectangle ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" I 'm Ġabove Ġthe Ġtext ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Size Changed Ġ{ Ġsize Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġdo Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Height Px Ġ= Ġsize . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" I 'm Ġbelow Ġthe Ġimage ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġwith ( Local Density . current ) Ġ{ Ġimage Height Px . to Dp () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* Ċ Ġ* ĠF akes Ġneeded Ġfor Ġsnippets Ġto Ġbuild : Ċ Ġ*/ Ċ Ċ @ Composable Ċ private Ġfun ĠImage ( modifier : ĠModifier Ġ= ĠModifier ) Ġ{ Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠLazy Column ( state : ĠLazy List State ) Ġ{ Ċ } Ċ Ċ private Ġobject ĠR Ġ{ ĊĠĠĠ Ġobject Ġdrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġrectangle Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ