package Ġcom . oz an . clean poke dex . ui . list Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Grid Cells Ċ import Ġandroidx . compose . foundation . lazy . Lazy Vertical Grid Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . material . Card Ċ import Ġandroidx . compose . material . Experimental Material Api Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . runtime . snapshot Flow Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġcom . google . ac comp an ist . in sets . system Bars Padding Ċ import Ġcom . oz an . clean poke dex . ui . navigation . Navigation Screen Ċ import Ġcom . oz an . clean poke dex . ui . preview . Pokemon Preview Ċ import Ġcom . oz an . clean poke dex . ui . theme . Po ke dex Shapes Ċ import Ġcom . oz an . clean poke dex . ui . theme . Po ke dex Theme Ċ import Ġcom . oz an . clean poke dex . ui . u im odel . pokemon . Pokemon List Ui Model Ċ import Ġcom . oz an . clean poke dex . ui . util . Center ed Error Ċ import Ġcom . oz an . clean poke dex . ui . util . Circular Loading Ċ import Ġcom . oz an . clean poke dex . ui . util . Pokemon Image Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . de bounce Ċ import Ġkotlinx . coroutines . flow . map Ċ Ċ @ Composable Ċ fun ĠPokemon List Screen ( ĊĠĠĠ Ġnav Controller : ĠNav Controller , ĊĠĠĠ ĠviewModel : ĠPokemon List Vm Ġ= Ġh ilt ViewModel (), Ċ ) Ġ{ ĊĠĠĠ Ġval Ġui State Ġby ĠviewModel . state . observe As State () ĊĊĠĠĠ Ġui State ?. let Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPokemon List State . Loading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCircular Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPokemon List State . Error Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCenter ed Error ( string Resource ( state . e . message Res Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPokemon List State . List Updated Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPokemon List Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon List Ġ= Ġstate . list , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Clicked Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Screen . Detail . create Route ( it . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Scroll Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . show Next Page ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠPokemon List Content ( ĊĠĠĠ Ġpokemon List : ĠList < Pokemon List Ui Model >, ĊĠĠĠ Ġon Item Clicked : Ġ( Pokemon List Ui Model ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Scroll : Ġ( Int ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. system Bars Padding () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPokemon List ( pokemon List Ġ= Ġpokemon List , Ġon Item Clicked Ġ= Ġon Item Clicked , Ġon Scroll Ġ= Ġon Scroll ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ @ Composable Ċ private Ġfun ĠPokemon List ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġpokemon List : ĠList < Pokemon List Ui Model >, ĊĠĠĠ Ġgrid Size : ĠInt Ġ= Ġ 2 , ĊĠĠĠ Ġon Item Clicked : Ġ( Pokemon List Ui Model ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Scroll : Ġ( Int ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġlist State Ġ= Ġremember Lazy List State () ĊĊĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġcells Ġ= ĠGrid Cells . Fixed ( grid Size ), ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( pokemon List ) Ġ{ Ġpokemon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPokemon Item ( pokemon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Clicked ( pokemon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( bottom Ġ= Ġ 6 4 . dp ), ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġlist State ĊĠĠĠ Ġ) ĊĠĠĠ ĠLa unched Effect ( list State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsnapshot Flow Ġ{ Ġlist State . first Visible Item Index Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġ+ Ġ 1 ) Ġ* Ġgrid Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Scroll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ private Ġfun ĠPokemon Item ( pokemon : ĠPokemon List Ui Model , Ġon Item Clicked : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠCard ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ), ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Item Clicked , ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠPo ke dex Shapes . medium ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . wrap Content Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"# ${ pokemon . id }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPokemon Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . size ( 7 2 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon . imageUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġpokemon . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠPokemon List Preview () Ġ{ ĊĠĠĠ ĠPo ke dex Theme ( ĊĠĠĠĠĠĠĠ Ġdark Theme Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPokemon List Content ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpokemon List Ġ= ĠPokemon Preview . pokemon List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Clicked Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Scroll Ġ= Ġ{} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }