package Ġcom . an af th dev . todo . ui Ċ Ċ import Ġandroid . app . DatePicker Dialog Ċ import Ġandroidx . compose . animation .* Ċ import Ġandroidx . compose . animation . core . Spring Ċ import Ġandroidx . compose . animation . core . animate Float As State Ċ import Ġandroidx . compose . animation . core . spring Ċ import Ġandroidx . compose . animation . core . t ween Ċ import Ġandroidx . compose . foundation .* Ċ import Ġandroidx . compose . foundation . interaction . Mutable Interaction Source Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Indexed Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . foundation . text . Basic TextField Ċ import Ġandroidx . compose . foundation . text . Keyboard Actions Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled .* Ċ import Ġandroidx . compose . material . icons . outlined . Add Ċ import Ġandroidx . compose . material . icons . rounded . Add Ċ import Ġandroidx . compose . material . ripple . remember R ipple Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . draw . rotate Ċ import Ġandroidx . compose . ui . focus . Focus Request er Ċ import Ġandroidx . compose . ui . focus . Focus State Ċ import Ġandroidx . compose . ui . focus . focus Request er Ċ import Ġandroidx . compose . ui . focus . on Focus Changed Ċ import Ġandroidx . compose . ui . graphics . Brush Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . platform . Local Software Keyboard Controller Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . input . I me Action Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . text . style . Text Decoration Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . Experimental Unit Api Ċ import Ġandroidx . compose . ui . unit . Text Unit Ċ import Ġandroidx . compose . ui . unit . Text Unit Type Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . window . Popup Ċ import Ġcom . an af th dev . todo . R Ċ import Ġcom . an af th dev . todo . common . Repository Ċ import Ġcom . an af th dev . todo . common . Todo ViewModel Ċ import Ġcom . an af th dev . todo . data . Category Color Ċ import Ġcom . an af th dev . todo . model . Category Ċ import Ġcom . an af th dev . todo . model . Drawer Menu Ċ import Ġcom . an af th dev . todo . model . Todo Ċ import Ġcom . an af th dev . todo . model . Todo Checkbox Ċ import Ġcom . an af th dev . todo . ui . theme .* Ċ import Ġcom . google . ac comp an ist . flow layout . Flow Main AxisAlignment Ċ import Ġcom . google . ac comp an ist . flow layout . Flow Row Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ @ Opt In ( Experimental Unit Api :: class ) Ċ @ Composable Ċ fun ĠDraw er Item ( Ċ ĉ drawer Menu : ĠDraw er Menu , Ċ ĉ todo Count : ĠInt , Ċ ĉ isSelected : ĠBoolean , Ċ ĉ todo Count Visible : ĠBoolean Ġ= Ġtrue , Ċ ĉ onClick : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ Ċ ĉ if Ġ( Ċĉ ĉ ( drawer Menu . icon Res Ġ== Ġnull ) Ġand Ċĉ ĉ ( drawer Menu . icon Vector Ġ== Ġnull ) Ċ ĉ ) Ġthrow ĠRuntimeException (" no Ġicon Ġin Ġdrawer Item ") ĊĉĊ ĉ val Ġbackground Ġ= ĠBr ush . linear Gradient ( Ċĉ ĉ colors Ġ= ĠlistOf ( Ċĉĉ ĉ black . copy ( alpha Ġ= Ġ 0 . 1 f ), Ċĉĉ ĉ Color . White Ċĉ ĉ ) Ċ ĉ ) ĊĉĊ ĉ Card ( Ċĉ ĉ elevation Ġ= Ġ 0 . dp , Ċĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 8 . dp ), Ċĉ ĉ backgroundColor Ġ= ĠColor . Transparent , Ċĉ ĉ modifier Ġ= ĠModifier Ċĉĉ ĉ . fill Max Width () Ċĉĉ ĉ . height ( 4 8 . dp ) Ċĉĉ ĉ . clip ( Rounded Corner Shape ( 8 . dp )) Ċĉĉ ĉ . click able ( Ċĉĉĉ ĉ indic ation Ġ= Ġremember R ipple ( color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f )), Ċĉĉĉ ĉ interaction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ} Ċĉĉ ĉ ) Ġ{ Ċĉĉĉ ĉ onClick () Ċĉĉ ĉ } Ċ ĉ ) Ġ{ Ċĉ ĉ Row ( Ċĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉ ĉ . fill Max Width () Ċĉĉĉ ĉ . then ( run Ġ{ Ċĉĉĉĉ ĉ if Ġ( isSelected ) ĠModifier . background ( background ) Ċĉĉĉĉ ĉ else ĠModifier . background ( Color . Transparent ) Ċĉĉĉ ĉ }) Ċĉ ĉ ) Ġ{ ĊĊĉĉ ĉ if Ġ( drawer Menu . icon Vector Ġ== Ġnull ) Ġ{ Ċĉĉĉ ĉ Icon ( Ċĉĉĉĉ ĉ p ainter Ġ= Ġdrawer Menu . icon Res !! , Ċĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 1 8 . dp ) Ċĉĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 3 f ) Ċĉĉĉ ĉ ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ Icon ( Ċĉĉĉĉ ĉ image Vector Ġ= Ġdrawer Menu . icon Vector , Ċĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 1 8 . dp ) Ċĉĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 3 f ) Ċĉĉĉ ĉ ) Ċĉĉ ĉ } ĊĊĉĉ ĉ Text ( Ċĉĉĉ ĉ text Ġ= Ġdrawer Menu . name , Ċĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉ ĉ fontSize Ġ= ĠText Unit ( 1 4 f , ĠText Unit Type . Sp ), Ċĉĉĉ ĉ font Weight Ġ= ĠFontWeight . Bold , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . padding ( 8 . dp ) Ċĉĉĉĉ ĉ . weight ( 2 f ), Ċĉĉ ĉ ) ĊĊĉĉĉ ĊĉĉĉĊĉĉ ĉ // ĠShow ĠTo - Do Ġsize Ġor Ġnot Ċĉĉ ĉ if Ġ( todo Count Visible ) Ġ{ Ċĉĉĉ ĉ Column ( Ċĉĉĉĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally , Ċĉĉĉĉ ĉ vertical Arrange ment Ġ= ĠArrange ment . Center , Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 2 8 . dp ) Ċĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 3 2 f ) Ċĉĉĉĉĉ ĉ . background ( Ċĉĉĉĉĉĉ ĉ gray . copy ( alpha Ġ= Ġ 0 . 1 2 f ), Ċĉĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 5 . dp ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉ ĉ Text ( Ċĉĉĉĉĉ ĉ text Ġ= Ġtodo Count . toString (), Ċĉĉĉĉĉ ĉ textAlign Ġ= ĠText Align . Center , Ċĉĉĉĉĉ ĉ fontSize Ġ= ĠText Unit ( 1 2 f , ĠText Unit Type . Sp ), Ċĉĉĉĉĉ ĉ font Weight Ġ= Ġif Ġ( isSelected ) ĠFontWeight . Sem iB old Ġelse ĠFontWeight . Normal , Ċĉĉĉĉĉ ĉ color Ġ= Ġgray . copy ( Ċĉĉĉĉĉĉ ĉ alpha Ġ= Ġif Ġ( isSelected ) Ġ 1 f Ġelse Ġ 0 . 8 f Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ Spacer ( Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 2 8 . dp ) Ċĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 2 8 f ) Ċĉĉĉ ĉ ) Ċĉĉ ĉ } ĊĊĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ //@ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠDraw er Menu Preview () Ġ{ Ċ ĉ val Ġdrawer Menu Ġ= ĠDraw er Menu ( Ċĉ ĉ " Dashboard ", Ċĉ ĉ icon Res Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ space _ dashboard ), Ċĉ ĉ icon Vector Ġ= Ġnull Ċ ĉ ) ĊĉĊ ĉ Column Ġ{ Ċĉ ĉ Drawer Item ( Ċĉĉ ĉ drawer Menu Ġ= Ġdrawer Menu , Ċĉĉ ĉ todo Count Ġ= Ġ 4 , Ċĉĉ ĉ isSelected Ġ= Ġtrue Ċĉ ĉ ) Ġ{} ĊĉĉĊĉ ĉ Drawer Item ( Ċĉĉ ĉ drawer Menu Ġ= Ġdrawer Menu , Ċĉĉ ĉ todo Count Ġ= Ġ 6 0 , Ċĉĉ ĉ isSelected Ġ= Ġfalse Ċĉ ĉ ) Ġ{} Ċ ĉ } Ċ } ĊĊĊĊĊ Ċ @ Opt In ( Experimental Unit Api :: class ) Ċ @ Composable Ċ fun ĠSelect Category Item ( Ċ ĉ category : ĠCategory , Ċ ĉ onClick : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ Ċ ĉ Card ( Ċĉ ĉ elevation Ġ= Ġ 0 . dp , Ċĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 8 . dp ), Ċĉ ĉ backgroundColor Ġ= ĠColor . Transparent , Ċĉ ĉ modifier Ġ= ĠModifier Ċĉĉ ĉ . fill Max Width () Ċĉĉ ĉ . height ( 4 8 . dp ) Ċĉĉ ĉ . clip ( Rounded Corner Shape ( 8 . dp )) Ċĉĉ ĉ . click able ( Ċĉĉĉ ĉ indic ation Ġ= Ġremember R ipple ( color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f )), Ċĉĉĉ ĉ interaction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ} Ċĉĉ ĉ ) Ġ{ ĠonClick () Ġ} Ċ ĉ ) Ġ{ Ċĉ ĉ Row ( Ċĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉ ĉ . fill Max Width () Ċĉ ĉ ) Ġ{ ĊĉĉĉĊĉĉ ĉ Icon ( Ċĉĉĉ ĉ p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ rect ), Ċĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉ ĉ tint Ġ= ĠColor ( category . color ), Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . size ( 1 8 . dp ) Ċĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp ) Ċĉĉĉĉ ĉ . weight ( 0 . 2 f ) Ċĉĉ ĉ ) ĊĉĉĉĊĉĉ ĉ Text ( Ċĉĉĉ ĉ text Ġ= Ġcategory . name , Ċĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉ ĉ fontSize Ġ= ĠText Unit ( 1 6 f , ĠText Unit Type . Sp ), Ċĉĉĉ ĉ font Weight Ġ= ĠFontWeight . Sem iB old , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . padding ( 8 . dp ) Ċĉĉĉĉ ĉ . weight ( 1 f ), Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ //@ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠSelect Category Item Preview () Ġ{ Ċ ĉ Select Category Item ( Ċĉ ĉ category Ġ= ĠCategory . default , Ċĉ ĉ onClick Ġ= Ġ{} Ċ ĉ ) Ċ } ĊĊĊĊĊ Ċ @ Opt In ( Experimental Unit Api :: class ) Ċ @ Composable Ċ fun ĠCategory Item ( Ċ ĉ category : ĠCategory , Ċ ĉ todo Count : ĠInt , Ċ ĉ show Menu : ĠBoolean Ġ= Ġfalse , Ċ ĉ isSelected : ĠBoolean Ġ= Ġfalse , Ċ ĉ as Drawer Item : ĠBoolean Ġ= Ġtrue , Ċ ĉ on Edit : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, Ċ ĉ on Edit As Drawer Item : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, Ċ ĉ onDelete : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, Ċ ĉ onClick : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ Ċ ĉ val Ġmenu Labels Ġ= ĠlistOf ( Ċĉ ĉ " Edit ", Ċĉ ĉ " Delete " Ċ ĉ ) ĊĉĊ ĉ val Ġmenu Icons Ġ= ĠlistOf ( Ċĉ ĉ Icons . Default . Edit , Ċĉ ĉ Icons . Default . Delete Ċ ĉ ) ĊĉĊ ĉ var Ġexpand Menu Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĉĊ ĉ val Ġbackground Ġ= ĠBr ush . linear Gradient ( Ċĉ ĉ colors Ġ= ĠlistOf ( Ċĉĉ ĉ Color ( category . color ). copy ( alpha Ġ= Ġ 0 . 1 f ), Ċĉĉ ĉ Color . White Ċĉ ĉ ) Ċ ĉ ) ĊĉĊ ĉ Card ( Ċĉ ĉ elevation Ġ= Ġ 0 . dp , Ċĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 8 . dp ), Ċĉ ĉ backgroundColor Ġ= ĠColor . Transparent , Ċĉ ĉ modifier Ġ= ĠModifier Ċĉĉ ĉ . fill Max Width () Ċĉĉ ĉ . height ( 4 8 . dp ) Ċĉĉ ĉ . clip ( Rounded Corner Shape ( 8 . dp )) Ċĉĉ ĉ . click able ( Ċĉĉĉ ĉ indic ation Ġ= Ġremember R ipple ( color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f )), Ċĉĉĉ ĉ interaction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ} Ċĉĉ ĉ ) Ġ{ ĠonClick () Ġ} Ċ ĉ ) Ġ{ Ċĉ ĉ Row ( Ċĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉ ĉ . fill Max Width () Ċĉĉĉ ĉ . then ( run Ġ{ Ċĉĉĉĉ ĉ if Ġ( isSelected ) ĠModifier . background ( background ) Ċĉĉĉĉ ĉ else ĠModifier . background ( Color . Transparent ) Ċĉĉĉ ĉ }) Ċĉ ĉ ) Ġ{ ĊĉĉĉĊĉĉ ĉ Icon ( Ċĉĉĉ ĉ p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ rect ), Ċĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉ ĉ tint Ġ= ĠColor ( category . color ), Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . size ( 1 8 . dp ) Ċĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp ) Ċĉĉĉĉ ĉ . weight ( 0 . 3 f ) Ċĉĉ ĉ ) ĊĉĉĉĊĉĉ ĉ Text ( Ċĉĉĉ ĉ text Ġ= Ġcategory . name , Ċĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉ ĉ fontSize Ġ= ĠText Unit ( 1 4 f , ĠText Unit Type . Sp ), Ċĉĉĉ ĉ font Weight Ġ= ĠFontWeight . Bold , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . padding ( 8 . dp ) Ċĉĉĉĉ ĉ . weight ( 2 f ), Ċĉĉ ĉ ) ĊĉĉĉĊĉĉ ĉ if Ġ( isSelected Ġor Ġshow Menu ) Ġ{ Ċĉĉĉ ĉ IconButton ( Ċĉĉĉĉ ĉ onClick Ġ= Ġ{ Ċĉĉĉĉĉ ĉ expand Menu Ġ= Ġtrue Ċĉĉĉĉ ĉ }, Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 3 2 . dp ) Ċĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp , Ġstart Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉ ĉ . background ( Ċĉĉĉĉĉĉ ĉ gray . copy ( alpha Ġ= Ġ 0 . 1 2 f ), Ċĉĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 5 . dp ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 4 5 f ) Ċĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Default . More Vert , Ċĉĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉ ĉ content Description Ġ= Ġnull Ċĉĉĉĉ ĉ ) ĊĉĉĉĉĉĊĉĉĉĉ ĉ Dropdown Menu ( Ċĉĉĉĉĉ ĉ expanded Ġ= Ġexpand Menu , Ċĉĉĉĉĉ ĉ on Dismiss Request Ġ= Ġ{ Ċĉĉĉĉĉĉ ĉ expand Menu Ġ= Ġfalse Ċĉĉĉĉĉ ĉ }, Ċĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉ ĉ . clip ( Rounded Corner Shape ( 2 4 . dp )) Ċĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉ ĉ for Ġ(( i , Ġs ) Ġin Ġmenu Labels . with Index ()) Ġ{ Ċĉĉĉĉĉĉ ĉ Dropdown MenuItem ( Ċĉĉĉĉĉĉĉ ĉ onClick Ġ= Ġ{ Ċĉĉĉĉĉĉĉĉ ĉ expand Menu Ġ= Ġfalse Ċĉĉĉĉĉĉĉĉ ĉ when Ġ( i ) Ġ{ Ċĉĉĉĉĉĉĉĉĉĉ 0 Ġ-> Ġif Ġ( as Drawer Item ) Ġon Edit As Drawer Item () Ġelse Ġon Edit () Ċĉĉĉĉĉĉĉĉĉĉ 1 Ġ-> ĠonDelete () Ċĉĉĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉĉ ĉ }, Ċĉĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉĉĉĉ ĉ image Vector Ġ= Ġmenu Icons [ i ], Ċĉĉĉĉĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉĉ ĉ Text ( Ċĉĉĉĉĉĉĉĉ ĉ text Ġ= Ġs , Ċĉĉĉĉĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ) Ċĉĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ Spacer ( Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 3 2 . dp ) Ċĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp , Ġstart Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 5 f ) Ċĉĉĉ ĉ ) Ċĉĉ ĉ } ĊĉĉĉĊĉĉĉ ĊĉĉĉĊĉĉ ĉ // ĠTO - DO ĠSize Ċĉĉ ĉ Column ( Ċĉĉĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally , Ċĉĉĉ ĉ vertical Arrange ment Ġ= ĠArrange ment . Center , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . size ( 2 8 . dp ) Ċĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp ) Ċĉĉĉĉ ĉ . weight ( 0 . 3 2 f ) Ċĉĉĉĉ ĉ . background ( Ċĉĉĉĉĉ ĉ gray . copy ( alpha Ġ= Ġ 0 . 1 2 f ), Ċĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 5 . dp ) Ċĉĉĉĉ ĉ ) Ċĉĉ ĉ ) Ġ{ Ċĉĉĉ ĉ Text ( Ċĉĉĉĉ ĉ text Ġ= Ġtodo Count . toString (), Ċĉĉĉĉ ĉ textAlign Ġ= ĠText Align . Center , Ċĉĉĉĉ ĉ fontSize Ġ= ĠText Unit ( 1 2 f , ĠText Unit Type . Sp ), Ċĉĉĉĉ ĉ font Weight Ġ= Ġif Ġ( as Drawer Item ) Ġ{ Ċĉĉĉĉĉ ĉ if Ġ( isSelected ) ĠFontWeight . Sem iB old Ġelse ĠFontWeight . Normal Ċĉĉĉĉ ĉ } Ġelse ĠFontWeight . Sem iB old , Ċĉĉĉĉ ĉ color Ġ= Ġgray . copy ( Ċĉĉĉĉĉ ĉ alpha Ġ= Ġif Ġ( as Drawer Item ) Ġ{ Ċĉĉĉĉĉĉ ĉ if Ġ( isSelected ) Ġ 1 f Ġelse Ġ 0 . 8 f Ċĉĉĉĉĉ ĉ } Ġelse Ġ 1 f Ċĉĉĉĉ ĉ ) Ċĉĉĉ ĉ ) Ċĉĉ ĉ } ĊĉĉĉĊĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ //@ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠCategory Item Preview () Ġ{ Ċ ĉ val Ġcategory Health Ġ= ĠCategory ( Ċĉ ĉ " Health ", Ċĉĉ 0 xFF 9 0 4 D 0 0 Ċ ĉ ) ĊĉĊ ĉ val Ġcategory Personal Ġ= ĠCategory ( Ċĉ ĉ " Personal ", Ċĉĉ 0 xFF 7 4 5 9 4 3 Ċ ĉ ) ĊĉĊ ĉ Column Ġ{ Ċĉ ĉ Category Item ( Ċĉĉ ĉ category Ġ= Ġcategory Health , Ċĉĉ ĉ todo Count Ġ= Ġ 6 , Ċĉĉ ĉ isSelected Ġ= Ġtrue Ċĉ ĉ ) Ġ{} ĊĉĉĊĉ ĉ Category Item ( Ċĉĉ ĉ category Ġ= Ġcategory Personal , Ċĉĉ ĉ todo Count Ġ= Ġ 1 5 0 , Ċĉĉ ĉ isSelected Ġ= Ġfalse Ċĉ ĉ ) Ġ{} Ċ ĉ } Ċ } ĊĊĊĊĊ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ @ Composable Ċ fun ĠTodo Item ( Ċ ĉ todo : ĠTodo , Ċ ĉ is Todo Complete : ĠBoolean , Ċ ĉ viewModel : ĠTodo ViewModel , Ċ ĉ on Checkbox Value Change : Ġ( Boolean ) Ġ-> ĠUnit , Ċ ĉ onClick : Ġ() Ġ-> ĠUnit , Ċ ĉ on Long Click : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĉĊ ĉ var Ġcategory Ġby Ġremember Ġ{ Ġmutable State Of ( Category . default ) Ġ} Ċ ĉ viewModel . repository . get Category ( todo . category ID ) Ġ{ Ġm Category Ġ-> Ċĉ ĉ category Ġ= Ġm Category Ċ ĉ } ĊĉĊ ĉ Card ( Ċĉ ĉ elevation Ġ= Ġ 0 . dp , Ċĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 8 . dp ), Ċĉ ĉ backgroundColor Ġ= ĠColor . Transparent , Ċĉ ĉ modifier Ġ= ĠModifier Ċĉĉ ĉ . fill Max Width () Ċĉĉ ĉ . height ( 4 8 . dp ) Ċĉĉ ĉ . clip ( Rounded Corner Shape ( 8 . dp )) Ċĉĉ ĉ . combined Clickable ( Ċĉĉĉ ĉ interaction Source Ġ= ĠMutable Interaction Source (), Ċĉĉĉ ĉ indic ation Ġ= Ġremember R ipple ( color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f )), Ċĉĉĉ ĉ onClick Ġ= ĠonClick , Ċĉĉĉ ĉ on Long Click Ġ= Ġon Long Click Ċĉĉ ĉ ) Ċ ĉ ) Ġ{ Ċĉ ĉ Row ( Ċĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉ ĉ ) Ġ{ ĊĉĉĉĊĉĉ ĉ Checkbox ( Ċĉĉĉ ĉ checked Ġ= Ġis Todo Complete , Ċĉĉĉ ĉ on Checked Change Ġ= Ġon Checkbox Value Change , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . weight ( 0 . 1 f , Ġfill Ġ= Ġfalse ) Ċĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp ) Ċĉĉ ĉ ) ĊĉĉĉĊĉĉ ĉ Text ( Ċĉĉĉ ĉ text Ġ= Ġtodo . title , Ċĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉ ĉ text Decoration Ġ= Ġif Ġ( is Todo Complete ) ĠText Decoration . Line Through Ġelse ĠText Decoration . None , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . weight ( 0 . 8 f ) Ċĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp , Ġend Ġ= Ġ 8 . dp ) Ċĉĉ ĉ ) ĊĉĉĉĊĉĉ ĉ Icon ( Ċĉĉĉ ĉ p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ rect ), Ċĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉ ĉ tint Ġ= ĠColor ( category . color ), Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . weight ( 0 . 1 f ) Ċĉĉĉĉ ĉ . size ( 1 6 . dp ) Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠTodo Item Preview () Ġ{ Ċ ĉ Column Ġ{ Ċĉ ĉ Todo Item ( Ċĉĉ ĉ todo Ġ= ĠTodo ( Ċĉĉĉ ĉ title Ġ= Ġ" New ĠTodo ", Ċĉĉĉ ĉ content Ġ= Ġ" Todo ĠContent ", Ċĉĉĉ ĉ date Ġ= ĠSystem . currentTimeMillis (), Ċĉĉĉ ĉ date Created Ġ= ĠSystem . currentTimeMillis (), Ċĉĉĉ ĉ checkbox es Ġ= Ġempty List (), Ċĉĉĉ ĉ category ID Ġ= ĠCategory . default . id Ċĉĉ ĉ ), Ċĉĉ ĉ is Todo Complete Ġ= Ġfalse , Ċĉĉ ĉ viewModel Ġ= ĠTodo ViewModel ( Repository . Fake Repository ()), Ċĉĉ ĉ on Checkbox Value Change Ġ= Ġ{}, Ċĉĉ ĉ onClick Ġ= Ġ{}, Ċĉĉ ĉ on Long Click Ġ= Ġ{} Ċĉ ĉ ) ĊĉĉĊĉ ĉ Todo Item ( Ċĉĉ ĉ todo Ġ= ĠTodo ( Ċĉĉĉ ĉ title Ġ= Ġ" New ĠTodo ", Ċĉĉĉ ĉ content Ġ= Ġ" Todo ĠContent ", Ċĉĉĉ ĉ date Ġ= ĠSystem . currentTimeMillis (), Ċĉĉĉ ĉ date Created Ġ= ĠSystem . currentTimeMillis (), Ċĉĉĉ ĉ checkbox es Ġ= Ġempty List (), Ċĉĉĉ ĉ category ID Ġ= ĠCategory . default . id Ċĉĉ ĉ ), Ċĉĉ ĉ is Todo Complete Ġ= Ġtrue , Ċĉĉ ĉ viewModel Ġ= ĠTodo ViewModel ( Repository . Fake Repository ()), Ċĉĉ ĉ on Checkbox Value Change Ġ= Ġ{}, Ċĉĉ ĉ onClick Ġ= Ġ{}, Ċĉĉ ĉ on Long Click Ġ= Ġ{} Ċĉ ĉ ) Ċ ĉ } Ċ } ĊĊĊĊĊ Ċ @ Opt In ( Ċ ĉ Experimental Unit Api :: class , Ċ ĉ Experimental Material Api :: class , Ċ ĉ Experimental Animation Api :: class Ċ ) Ċ @ Composable Ċ fun ĠTodo Item Input ( Ċ ĉ todo Name : ĠString , Ċ ĉ textField Focus Request er : ĠFocus Request er , Ċ ĉ viewModel : ĠTodo ViewModel , Ċ ĉ rotation Angle Arrow Icon : ĠFloat Ġ= Ġ 0 f , Ċ ĉ category ID : ĠInt ? Ġ= Ġnull , Ċ ĉ category : ĠCategory ? Ġ= Ġnull , Ċ ĉ onClick : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, Ċ ĉ on Value Change : Ġ( String ) Ġ-> ĠUnit , Ċ ĉ on Done : Ġ( String , ĠLong , ĠInt ) Ġ-> ĠUnit , Ċ ) Ġ{ Ċ ĉ val Ġcontext Ġ= ĠLocal Context . current ĊĉĊ ĉ var Ġcurrent Category Ġby Ġremember Ġ{ Ġmutable State Of ( Category . default ) Ġ} ĊĉĊ ĉ // Ġif Ġthe Ġvalue Ġis Ġ 0 , Ġit Ġmeans Ġthe Ġdate Ġhas Ġnot Ġbeen Ġset Ċ ĉ var Ġselected Date Ġby Ġremember Ġ{ Ġmutable State Of ( 0 L ) Ġ} ĊĉĊ ĉ var Ġshow Popup Date Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĉĊ ĉ var Ġis TextField Focused Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĉĊ ĉ if Ġ( category ID Ġ!= Ġnull ) Ġ{ Ċĉ ĉ viewModel . repository . get Category ( category ID ) Ġ{ Ġm Category Ġ-> Ċĉĉ ĉ current Category Ġ= Ġm Category Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ Row ( Ċĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉ ĉ modifier Ġ= ĠModifier . fill Max Width () Ċ ĉ ) Ġ{ ĊĉĉĊĉĉ ĊĉĉĊĉ ĉ // ĠText ĠField Ċĉ ĉ Outlined TextField ( Ċĉĉ ĉ value Ġ= Ġtodo Name , Ċĉĉ ĉ on Value Change Ġ= Ġ{ Ġs Ġ-> Ċĉĉĉ ĉ if Ġ( s . length Ġ<= Ġ 9 0 ) Ġon Value Change ( s ) Ċĉĉ ĉ }, Ċĉĉ ĉ max Lines Ġ= Ġ 4 , Ċĉĉ ĉ keyboard Options Ġ= ĠKeyboard Options ( Ċĉĉĉ ĉ ime Action Ġ= ĠI me Action . Done Ċĉĉ ĉ ), Ċĉĉ ĉ keyboard Actions Ġ= ĠKeyboard Actions ( Ċĉĉĉ ĉ on Done Ġ= Ġ{ Ċĉĉĉĉ ĉ on Done ( Ċĉĉĉĉĉ ĉ todo Name , Ċĉĉĉĉĉ ĉ selected Date , Ċĉĉĉĉĉ ĉ category ?. id Ġ?: Ġcurrent Category . id Ċĉĉĉĉ ĉ ) Ċĉĉĉ ĉ } Ċĉĉ ĉ ), Ċĉĉ ĉ text Style Ġ= ĠTextStyle ( Ċĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ) Ċĉĉ ĉ ), Ċĉĉ ĉ colors Ġ= ĠTextField Defaults . outlined TextField Colors ( Ċĉĉĉ ĉ focused BorderColor Ġ= ĠColor . Transparent , Ċĉĉĉ ĉ un focused BorderColor Ġ= ĠColor . Transparent Ċĉĉ ĉ ), Ċĉĉ ĉ placeholder Ġ= Ġ{ Ċĉĉĉ ĉ Text ( Ċĉĉĉĉ ĉ text Ġ= Ġ" Write Ġa Ġnew ĠTo Do ", Ċĉĉĉĉ ĉ color Ġ= Ġgray Ċĉĉĉ ĉ ) Ċĉĉ ĉ }, Ċĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉ ĉ . weight ( 1 . 5 f ) Ċĉĉĉ ĉ . focus Request er ( textField Focus Request er ) Ċĉĉĉ ĉ . on Focus Changed Ġ{ Ġfocus State Ġ-> Ċĉĉĉĉ ĉ is TextField Focused Ġ= Ġfocus State . is Focused Ċĉĉĉ ĉ } Ċĉ ĉ ) ĊĉĉĊĉĉ ĊĉĉĊĉ ĉ Animated Visibility ( Ċĉĉ ĉ visible Ġ= Ġis TextField Focused , Ċĉĉ ĉ enter Ġ= Ġscale In ( Ċĉĉĉ ĉ animation Spec Ġ= Ġt ween ( 6 0 0 ) Ċĉĉ ĉ ), Ċĉĉ ĉ exit Ġ= Ġscale Out ( Ċĉĉĉ ĉ animation Spec Ġ= Ġt ween ( 6 0 0 ) Ċĉĉ ĉ ), Ċĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉ ĉ . weight ( 1 f ) Ċĉ ĉ ) Ġ{ ĊĉĉĉĊĉĉ ĉ Row Ġ{ Ċĉĉĉ ĉ // ĠDate Ċĉĉĉ ĉ IconButton ( Ċĉĉĉĉ ĉ onClick Ġ= Ġ{ Ċĉĉĉĉĉ ĉ if Ġ( selected Date Ġ== Ġ 0 L ) Ġ{ Ċĉĉĉĉĉĉ ĉ val Ġcalendar Ġ= ĠCalendar . getInstance () Ċĉĉĉĉĉĉ ĉ val Ġlistener Ġ= ĠDate Picker Dialog . On Date Set Listener Ġ{ Ġview , Ġyear , Ġmonth , Ġday OfMonth Ġ-> Ċĉĉĉĉĉĉĉ ĉ calendar [ Calendar . DAY _ OF _ MONTH ] Ġ= Ġday OfMonth Ċĉĉĉĉĉĉĉ ĉ calendar [ Calendar . MONTH ] Ġ= Ġmonth Ċĉĉĉĉĉĉĉ ĉ calendar [ Calendar . YEAR ] Ġ= Ġyear Ċĉĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉĉ ĉ selected Date Ġ= Ġcalendar . time In Millis Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉ ĉ DatePicker Dialog ( Ċĉĉĉĉĉĉĉ ĉ context , Ċĉĉĉĉĉĉĉ ĉ listener , Ċĉĉĉĉĉĉĉ ĉ calendar [ Calendar . YEAR ], Ċĉĉĉĉĉĉĉ ĉ calendar [ Calendar . MONTH ], Ċĉĉĉĉĉĉĉ ĉ calendar [ Calendar . DAY _ OF _ MONTH ] Ċĉĉĉĉĉĉ ĉ ). show () Ċĉĉĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉĉĉ ĉ show Popup Date Ġ= Ġtrue Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ }, Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 3 6 . dp ) Ċĉĉĉĉĉ ĉ . background ( Ċĉĉĉĉĉĉ ĉ gray . copy ( alpha Ġ= Ġ 0 . 1 2 f ), Ċĉĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 8 . dp ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 4 f , Ġfalse ) Ċĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉ ĉ if Ġ( selected Date Ġ!= Ġ 0 L ) Ġ{ Ċĉĉĉĉĉ ĉ Badge Box Ġ{ Ċĉĉĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Default . DateRange , Ċĉĉĉĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉĉ ĉ . size ( 1 8 . dp ) Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Default . DateRange , Ċĉĉĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉ ĉ . size ( 1 8 . dp ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ } ĊĉĉĉĉĉĊĉĉĉĉ ĉ if Ġ( show Popup Date ) Ġ{ Ċĉĉĉĉĉ ĉ Popup ( Ċĉĉĉĉĉĉ ĉ alignment Ġ= ĠAlignment . Top Center , Ċĉĉĉĉĉĉ ĉ on Dismiss Request Ġ= Ġ{ Ċĉĉĉĉĉĉĉ ĉ show Popup Date Ġ= Ġfalse Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉ ĉ Card ( Ċĉĉĉĉĉĉĉ ĉ elevation Ġ= Ġ 4 . dp Ċĉĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ Column ( Ċĉĉĉĉĉĉĉĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally , Ċĉĉĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉĉĉ ĉ . background ( surface _ light ) Ċĉĉĉĉĉĉĉĉĉ ĉ . padding ( 1 6 . dp ) Ċĉĉĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉĉĉ ĉ Text ( Ċĉĉĉĉĉĉĉĉĉ ĉ text Ġ= Ġif Ġ( selected Date Ġ== Ġ 0 L ) Ġ"- /- /- " Ġelse ĠSimpleDateFormat (" dd - MMM - yyyy ", ĠLocale . getDefault ()). format ( selected Date ), Ċĉĉĉĉĉĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉĉĉĉĉ ĉ font Weight Ġ= ĠFontWeight . Sem iB old Ċĉĉĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉĉĉ ĉ Outlined Button ( Ċĉĉĉĉĉĉĉĉĉ ĉ onClick Ġ= Ġ{ Ċĉĉĉĉĉĉĉĉĉĉ ĉ selected Date Ġ= Ġ 0 L Ċĉĉĉĉĉĉĉĉĉĉ ĉ show Popup Date Ġ= Ġfalse Ċĉĉĉĉĉĉĉĉĉ ĉ }, Ċĉĉĉĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉĉĉĉ ĉ . padding ( top Ġ= Ġ 8 . dp ) Ċĉĉĉĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉĉĉĉ ĉ Text (" Remove ĠDate ") Ċĉĉĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉĉĉ Ċĉĉĉĉ ĊĉĉĉĉĊĉĉĉ ĉ // ĠCategory Ċĉĉĉ ĉ Row ( Ċĉĉĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉĉĉĉ ĉ horizontal Arrange ment Ġ= ĠArrange ment . Center , Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 3 6 . dp ) Ċĉĉĉĉĉ ĉ . weight ( 0 . 9 f ) Ċĉĉĉĉĉ ĉ . padding ( start Ġ= Ġ 4 . dp ) Ċĉĉĉĉĉ ĉ . background ( Ċĉĉĉĉĉĉ ĉ gray . copy ( alpha Ġ= Ġ 0 . 1 2 f ), Ċĉĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 8 . dp ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ . then ( Ċĉĉĉĉĉĉ ĉ if Ġ( category Ġ== Ġnull ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ Modifier . click able Ġ{ Ċĉĉĉĉĉĉĉĉ ĉ onClick () Ċĉĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉ ĉ } Ġelse ĠModifier Ċĉĉĉĉĉ ĉ ) Ċĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉ ĉ p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ rect ), Ċĉĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉĉ ĉ tint Ġ= ĠColor ( category ?. color Ġ?: Ġcurrent Category . color ), Ċĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉ ĉ . size ( 2 2 . dp ) Ċĉĉĉĉĉĉ ĉ . padding ( 4 . dp ) Ċĉĉĉĉ ĉ ) Ċĉĉĉĉĉ Ċĉĉĉĉĉ ĊĉĉĉĉĉĊĉĉĉĉ ĉ Text ( Ċĉĉĉĉĉ ĉ text Ġ= Ġcategory ?. name Ġ?: Ġcurrent Category . name , Ċĉĉĉĉĉ ĉ textAlign Ġ= ĠText Align . Center , Ċĉĉĉĉĉ ĉ fontSize Ġ= ĠText Unit ( 1 2 f , ĠText Unit Type . Sp ), Ċĉĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉ ĉ overflow Ġ= ĠText Overflow . El lipsis , Ċĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉ ĉ . padding ( start Ġ= Ġ 2 . dp , Ġend Ġ= Ġ 2 . dp ) Ċĉĉĉĉ ĉ ) Ċĉĉĉĉĉ Ċĉĉĉĉĉ ĊĉĉĉĉĉĊĉĉĉĉ ĉ if Ġ( category Ġ== Ġnull ) Ġ{ Ċĉĉĉĉĉ ĉ val Ġrotation Angle Ġby Ġanimate Float As State ( Ċĉĉĉĉĉĉ ĉ target Value Ġ= Ġrotation Angle Arrow Icon , Ċĉĉĉĉĉĉ ĉ animation Spec Ġ= Ġt ween ( 4 0 0 ) Ċĉĉĉĉĉ ĉ ) ĊĉĉĉĉĉĉĊĉĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Default . Keyboard Arrow Down , Ċĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉ ĉ . size ( 2 8 . dp ) Ċĉĉĉĉĉĉĉ ĉ . padding ( start Ġ= Ġ 4 . dp , Ġend Ġ= Ġ 4 . dp , Ġtop Ġ= Ġ 4 . dp ) Ċĉĉĉĉĉĉĉ ĉ . rotate ( rotation Angle ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĉĉĉĊĉ ĉ } ĊĉĉĊĉĉ ĊĉĉĊ ĉ } Ċ } Ċ Ċ @ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠTodo Item Input Preview () Ġ{ Ċ ĉ Todo Item Input ( Ċĉ ĉ todo Name Ġ= Ġ"", Ċĉ ĉ viewModel Ġ= ĠTodo ViewModel ( Repository . Fake Repository ()), Ċĉ ĉ textField Focus Request er Ġ= ĠFocus Request er (), Ċĉ ĉ on Done Ġ= Ġ{ Ġs , Ġl , Ġi Ġ-> Ġ}, Ċĉ ĉ on Value Change Ġ= Ġ{}, Ċ ĉ ) Ċ } ĊĊĊĊĊ Ċ @ Opt In ( Ċ ĉ Experimental Compose Ui Api :: class , Ċ ĉ Experimental Foundation Api :: class , Ċ ĉ Experimental Animation Api :: class Ċ ) Ċ @ Composable Ċ fun ĠCategory Item Input ( Ċ ĉ name : ĠString , Ċ ĉ color : ĠLong , Ċ ĉ textField Focus Request er : ĠFocus Request er , Ċ ĉ input Mode Edit : ĠBoolean Ġ= Ġfalse , Ċ ĉ on Value Change : Ġ( String , ĠLong ) Ġ-> ĠUnit , Ċ ĉ on Done : Ġ( String , ĠLong ) Ġ-> ĠUnit , Ċ ĉ on Focus Change : Ġ( Focus State ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ Ċ ĉ val Ġkeyboard Controller Ġ= ĠLocal Software Keyboard Controller . current ĊĉĊ ĉ Column ( Ċĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally Ċ ĉ ) Ġ{ Ċĉ ĉ Row Ġ{ Ċĉĉ ĉ Outlined TextField ( Ċĉĉĉ ĉ value Ġ= Ġname , Ċĉĉĉ ĉ max Lines Ġ= Ġ 1 , Ċĉĉĉ ĉ keyboard Options Ġ= ĠKeyboard Options ( ime Action Ġ= ĠI me Action . Done ), Ċĉĉĉ ĉ text Style Ġ= ĠTextStyle ( Ċĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ) Ċĉĉĉ ĉ ), Ċĉĉĉ ĉ on Value Change Ġ= Ġ{ Ġs Ġ-> Ċĉĉĉĉ ĉ if Ġ( s . length Ġ<= Ġ 2 0 ) Ġon Value Change ( s , Ġcolor ) Ċĉĉĉ ĉ }, Ċĉĉĉ ĉ label Ġ= Ġ{ Ċĉĉĉĉ ĉ Text (" Category ĠName ") Ċĉĉĉ ĉ }, Ċĉĉĉ ĉ keyboard Actions Ġ= ĠKeyboard Actions ( Ċĉĉĉĉ ĉ on Done Ġ= Ġ{ Ċĉĉĉĉĉ ĉ keyboard Controller ?. hide () Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ ), Ċĉĉĉ ĉ trailing Icon Ġ= Ġ{ Ċĉĉĉĉ ĉ Animated Visibility ( Ċĉĉĉĉĉ ĉ visible Ġ= Ġname . isNotBlank (), Ċĉĉĉĉĉ ĉ enter Ġ= Ġscale In (), Ċĉĉĉĉĉ ĉ exit Ġ= Ġscale Out () Ċĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉ ĉ Row ( Ċĉĉĉĉĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically Ċĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉ ĉ Divider ( Ċĉĉĉĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 6 f ), Ċĉĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier . size ( 1 . dp , Ġ 4 0 . dp ) Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉĉ Ċĉĉĉĉĉĉ ĉ IconButton ( Ċĉĉĉĉĉĉĉ ĉ onClick Ġ= Ġ{ Ċĉĉĉĉĉĉĉĉ ĉ keyboard Controller ?. hide () Ċĉĉĉĉĉĉĉĉ ĉ on Done ( name , Ġcolor ) Ċĉĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ if Ġ( input Mode Edit ) ĠIcon ( Ċĉĉĉĉĉĉĉĉ ĉ p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ save ), Ċĉĉĉĉĉĉĉĉ ĉ tint Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 6 f ), Ċĉĉĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull Ċĉĉĉĉĉĉĉ ĉ ) Ġelse ĠIcon ( Ċĉĉĉĉĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Rounded . Add , Ċĉĉĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull Ċĉĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ }, Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . weight ( 1 f ) Ċĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp , Ġstart Ġ= Ġ 8 . dp ) Ċĉĉĉĉ ĉ . focus Request er ( textField Focus Request er ) Ċĉĉĉĉ ĉ . on Focus Changed Ġ{ Ġstate Ġ-> Ġon Focus Change ( state ) Ġ} Ċĉĉ ĉ ) Ċĉ ĉ } ĊĉĉĊĉĉ ĊĉĉĊĉ ĉ // ĠColor ĠSelector Ċĉ ĉ Animated Visibility ( Ċĉĉ ĉ visible Ġ= Ġname . isNotBlank (), Ċĉĉ ĉ enter Ġ= Ġexpand Vert ically ( Ċĉĉĉĉ ĉ animation Spec Ġ= Ġspring ( Ċĉĉĉĉ ĉ d amping Ratio Ġ= Ġ 0 . 4 f , Ġ Ġ// ĠBo unce Ġd amping Ġratio Ċĉĉĉĉ ĉ st iff ness Ġ= ĠSpring . St iff ness Low Ċĉĉĉ ĉ ) Ċĉĉ ĉ ), Ċĉĉ ĉ modifier Ġ= ĠModifier . padding ( top Ġ= Ġ 8 . dp , Ġbottom Ġ= Ġ 8 . dp ) Ċĉ ĉ ) Ġ{ Ċĉĉ ĉ Flow Row ( Ċĉĉĉ ĉ main AxisAlignment Ġ= ĠFlow Main AxisAlignment . Center Ċĉĉ ĉ ) Ġ{ Ċĉĉĉ ĉ Category Color . values . forEach Ġ{ Ġhex Ġ-> Ċĉĉĉĉ ĉ Column ( Ċĉĉĉĉĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally , Ċĉĉĉĉĉ ĉ vertical Arrange ment Ġ= ĠArrange ment . Center , Ċĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉ ĉ . size ( 3 4 . dp ) Ċĉĉĉĉĉĉ ĉ . clip ( Rounded Corner Shape ( 2 5 )) Ċĉĉĉĉĉĉ ĉ . border ( Ċĉĉĉĉĉĉĉ ĉ width Ġ= Ġ 1 . dp , Ċĉĉĉĉĉĉĉ ĉ color Ġ= Ġif Ġ( color Ġ== Ġhex ) Ġprimary _ light Ġelse ĠColor . Transparent , Ċĉĉĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 2 5 ) Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉ ĉ . click able ( Ċĉĉĉĉĉĉĉ ĉ interaction Source Ġ= ĠMutable Interaction Source (), Ċĉĉĉĉĉĉĉ ĉ indic ation Ġ= Ġremember R ipple ( Ċĉĉĉĉĉĉĉĉ ĉ color Ġ= ĠColor ( hex ) Ċĉĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉ ĉ ) Ġ{ Ġon Value Change ( name , Ġhex ) Ġ} Ċĉĉĉĉĉĉ ĉ . animate Enter Exit ( Ċĉĉĉĉĉĉĉ ĉ enter Ġ= Ġscale In ( Ċĉĉĉĉĉĉĉĉ ĉ animation Spec Ġ= Ġt ween ( Ċĉĉĉĉĉĉĉĉĉ ĉ duration Millis Ġ= Ġ 8 0 0 , Ċĉĉĉĉĉĉĉĉĉ ĉ delay Millis Ġ= Ġ 2 0 0 Ċĉĉĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉĉĉ ĉ ), Ċĉĉĉĉĉĉĉ ĉ exit Ġ= Ġscale Out () Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉ ĉ Box ( Ċĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉĉ ĉ . size ( 2 4 . dp ) Ċĉĉĉĉĉĉĉ ĉ . clip ( Rounded Corner Shape ( 1 0 0 )) Ċĉĉĉĉĉĉĉ ĉ . background ( Color ( hex )) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ //@ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠCategory Item Input Preview () Ġ{ Ċ ĉ Column ( Ċĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally Ċ ĉ ) Ġ{ Ċĉ ĉ Row Ġ{ Ċĉĉ ĉ Outlined TextField ( Ċĉĉĉ ĉ value Ġ= Ġ"", Ċĉĉĉ ĉ on Value Change Ġ= Ġ{}, Ċĉĉĉ ĉ label Ġ= Ġ{ Ċĉĉĉĉ ĉ Text (" Category ĠName ") Ċĉĉĉ ĉ }, Ċĉĉĉ ĉ keyboard Actions Ġ= ĠKeyboard Actions ( Ċĉĉĉĉ ĉ on Done Ġ= Ġ{ ĊĉĉĉĉĉĊĉĉĉĉ ĉ } Ċĉĉĉ ĉ ), Ċĉĉĉ ĉ trailing Icon Ġ= Ġ{ Ċĉĉĉĉ ĉ Row ( Ċĉĉĉĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically Ċĉĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉĉ ĉ Divider ( Ċĉĉĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 6 f ), Ċĉĉĉĉĉĉ ĉ modifier Ġ= ĠModifier . size ( 1 . dp , Ġ 4 0 . dp ) Ċĉĉĉĉĉ ĉ ) ĊĉĉĉĉĉĉĊĉĉĉĉĉ ĉ IconButton ( onClick Ġ= Ġ{}) Ġ{ Ċĉĉĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Rounded . Add , Ċĉĉĉĉĉĉĉ ĉ content Description Ġ= Ġnull Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ }, Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . weight ( 1 f ) Ċĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp , Ġstart Ġ= Ġ 8 . dp ) Ċĉĉ ĉ ) Ċĉ ĉ } ĊĉĉĊĉ ĉ Flow Row ( Ċĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉ ĉ . padding ( top Ġ= Ġ 8 . dp , Ġbottom Ġ= Ġ 8 . dp ) Ċĉ ĉ ) Ġ{ Ċĉĉ ĉ Category Color . values . forEach Ġ{ Ġhex Ġ-> Ċĉĉĉ ĉ Column ( Ċĉĉĉĉ ĉ horizontal Alignment Ġ= ĠAlignment . Center H orizontally , Ċĉĉĉĉ ĉ vertical Arrange ment Ġ= ĠArrange ment . Center , Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 3 6 . dp ) Ċĉĉĉĉĉ ĉ . border ( Ċĉĉĉĉĉĉ ĉ width Ġ= Ġ 1 . dp , Ċĉĉĉĉĉĉ ĉ color Ġ= Ġon _ surface _ light . copy ( alpha Ġ= Ġ 0 . 6 f ), Ċĉĉĉĉĉĉ ĉ shape Ġ= ĠRo unded Corner Shape ( 2 5 ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉ ĉ Box ( Ċĉĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉĉ ĉ . size ( 2 4 . dp ) Ċĉĉĉĉĉĉ ĉ . clip ( Rounded Corner Shape ( 1 0 0 )) Ċĉĉĉĉĉĉ ĉ . background ( Color ( hex )) Ċĉĉĉĉ ĉ ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ } ĊĊĊĊĊ Ċ @ Composable Ċ fun ĠCheckbox ( Ċ ĉ checked : ĠBoolean , Ċ ĉ on Checked Change : Ġ( Boolean ) Ġ-> ĠUnit , Ċ ĉ modifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ Ċ ĉ Box ( Ċĉ ĉ content Alignment Ġ= ĠAlignment . Center , Ċĉ ĉ modifier Ġ= ĠModifier Ċĉĉ ĉ . then ( modifier ) Ċĉĉ ĉ . size ( 2 0 . dp , Ġ 2 0 . dp ) Ċĉĉ ĉ . clip ( Rounded Corner Shape ( 4 . dp )) Ċĉĉ ĉ . background ( Ċĉĉĉ ĉ if Ġ( checked ) Ġblack . copy ( alpha Ġ= Ġ 0 . 9 f ) Ċĉĉĉ ĉ else Ġgray . copy ( alpha Ġ= Ġ 0 . 3 5 f ) Ċĉĉ ĉ ) Ċĉĉ ĉ . click able Ġ{ Ġon Checked Change (! checked ) Ġ} Ċ ĉ ) Ġ{ Ċĉ ĉ if Ġ( checked ) Ġ{ Ċĉĉ ĉ Icon ( Ċĉĉĉ ĉ image Vector Ġ= ĠIcons . Default . Check , Ċĉĉĉ ĉ tint Ġ= ĠColor . White , Ċĉĉĉ ĉ content Description Ġ= Ġnull Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ //@ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠCheckbox Preview () Ġ{ Ċ ĉ Column Ġ{ Ċĉ ĉ Checkbox ( Ċĉĉ ĉ checked Ġ= Ġfalse , Ċĉĉ ĉ on Checked Change Ġ= Ġ{} Ċĉ ĉ ) ĊĉĉĊĉ ĉ Checkbox ( Ċĉĉ ĉ checked Ġ= Ġtrue , Ċĉĉ ĉ on Checked Change Ġ= Ġ{} Ċĉ ĉ ) Ċ ĉ } Ċ } ĊĊ Ċ @ Opt In ( Experimental Compose Ui Api :: class ) Ċ @ Composable Ċ fun ĠTodo Check boxes ( Ċ ĉ // Ġif Ġthe Ġtext Ġfield Ġis Ġfocused , Ġit Ġwill Ġuse Ġthis Ġvalue , Ċ ĉ // Ġif Ġit Ġis Ġnot Ġfocused , Ġit Ġwill Ġuse Ġtodo Checkbox . title Ċ ĉ value : ĠString , Ċ ĉ todo Check boxes : ĠList < Todo Checkbox >, Ċ ĉ on Checked Change : Ġ( Int , ĠBoolean ) Ġ-> ĠUnit , Ċ ĉ on New Item : Ġ( Todo Checkbox ) Ġ-> ĠUnit , Ċ ĉ onDelete : Ġ( Int ) Ġ-> ĠUnit , Ċ ĉ on Value Change : Ġ( Int , ĠString ) Ġ-> ĠUnit , Ċ ĉ on Focus Change : Ġ( String ) Ġ-> ĠUnit , Ċ ĉ modifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĉĊ ĉ val Ġkeyboard Controller Ġ= ĠLocal Software Keyboard Controller . current ĊĉĊ ĉ // ĠCurrent ĠTextField Ġfocus Ġindex Ċ ĉ var Ġcurrent Focus Index Ġby Ġremember Ġ{ Ġmutable State Of (- 1 ) Ġ} ĊĉĊ ĉ Lazy Column ( Ċĉ ĉ modifier Ġ= ĠModifier Ċĉĉ ĉ . fill Max Width () Ċĉĉ ĉ . wrap Content Height () Ċĉĉ ĉ . then ( modifier ) Ċ ĉ ) Ġ{ ĊĉĉĊĉ ĉ items Indexed ( todo Check boxes ) Ġ{ Ġindex , Ġtodo Checkbox Ġ-> Ċĉĉ ĉ var Ġis Item Checked Ġby Ġremember Ġ{ Ġmutable State Of ( todo Checkbox . is Complete ) Ġ} ĊĉĉĉĊĉĉ ĉ Row ( Ċĉĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . fill Max Width () Ċĉĉĉĉ ĉ . padding ( 8 . dp ) Ċĉĉ ĉ ) Ġ{ Ċĉĉĉ ĉ Checkbox ( Ċĉĉĉĉ ĉ checked Ġ= Ġis Item Checked , Ċĉĉĉĉ ĉ on Checked Change Ġ= Ġ{ Ġis Checked Ġ-> Ċĉĉĉĉĉ ĉ is Item Checked Ġ= Ġis Checked Ċĉĉĉĉĉ ĉ on Checked Change ( todo Checkbox . id , Ġis Item Checked ) Ċĉĉĉĉ ĉ }, Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . weight ( 0 . 1 f , Ġfill Ġ= Ġfalse ) Ċĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp ) Ċĉĉĉ ĉ ) ĊĉĉĉĉĊĉĉĉ ĉ Basic TextField ( Ċĉĉĉĉ ĉ value Ġ= Ġif Ġ( current Focus Index Ġ== Ġindex ) Ġvalue Ġelse Ġtodo Checkbox . title , Ċĉĉĉĉ ĉ single Line Ġ= Ġtrue , Ċĉĉĉĉ ĉ text Style Ġ= ĠTextStyle ( Ċĉĉĉĉĉ ĉ text Decoration Ġ= Ġif Ġ( todo Checkbox . is Complete ) ĠText Decoration . Line Through Ċĉĉĉĉĉĉĉĉĉĉ Ġelse ĠText Decoration . None Ċĉĉĉĉ ĉ ), Ċĉĉĉĉ ĉ keyboard Options Ġ= ĠKeyboard Options ( Ċĉĉĉĉĉ ĉ ime Action Ġ= ĠI me Action . Done Ċĉĉĉĉ ĉ ), Ċĉĉĉĉ ĉ keyboard Actions Ġ= ĠKeyboard Actions ( Ċĉĉĉĉĉ ĉ on Done Ġ= Ġ{ Ġkeyboard Controller ?. hide () Ġ} Ċĉĉĉĉ ĉ ), Ċĉĉĉĉ ĉ on Value Change Ġ= Ġ{ Ġs Ġ-> Ċĉĉĉĉĉ ĉ if Ġ( current Focus Index Ġ== Ġindex ) Ġ{ Ċĉĉĉĉĉĉ ĉ on Value Change ( todo Checkbox . id , Ġs ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ }, Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . weight ( 1 f ) Ċĉĉĉĉĉ ĉ . on Focus Changed Ġ{ Ġstate Ġ-> Ċĉĉĉĉĉĉ ĉ if Ġ( state . is Focused ) Ġ{ Ċĉĉĉĉĉĉĉ ĉ current Focus Index Ġ= Ġindex Ċĉĉĉĉĉĉĉ ĉ on Focus Change ( todo Checkbox . title ) Ċĉĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ } Ċĉĉĉ ĉ ) ĊĉĉĉĉĊĉĉĉ ĉ IconButton ( Ċĉĉĉĉ ĉ onClick Ġ= Ġ{ Ċĉĉĉĉĉ ĉ onDelete ( todo Checkbox . id ) Ċĉĉĉĉ ĉ }, Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . size ( 2 0 . dp ) Ċĉĉĉĉĉ ĉ . padding ( start Ġ= Ġ 8 . dp ) Ċĉĉĉ ĉ ) Ġ{ Ċĉĉĉĉ ĉ Icon ( Ċĉĉĉĉĉ ĉ p ainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ x _ mark ), Ċĉĉĉĉĉ ĉ tint Ġ= Ġblack , Ċĉĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉ ĉ ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĉĉĊĉ ĉ item Ġ{ Ċĉĉ ĉ Row ( Ċĉĉĉ ĉ vertical Alignment Ġ= ĠAlignment . Center Vert ically , Ċĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉ ĉ . padding ( top Ġ= Ġ 1 2 . dp , Ġbottom Ġ= Ġ 2 4 . dp , Ġstart Ġ= Ġ 8 . dp , Ġend Ġ= Ġ 8 . dp ) Ċĉĉĉĉ ĉ . click able Ġ{ Ċĉĉĉĉĉ ĉ on New Item ( Ċĉĉĉĉĉĉ ĉ Todo Checkbox ( Ċĉĉĉĉĉĉĉ ĉ title Ġ= Ġ"", Ċĉĉĉĉĉĉĉ ĉ is Complete Ġ= Ġfalse Ċĉĉĉĉĉĉ ĉ ) Ċĉĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ } Ċĉĉ ĉ ) Ġ{ Ċĉĉĉ ĉ Icon ( Ċĉĉĉĉ ĉ image Vector Ġ= ĠIcons . Outlined . Add , Ċĉĉĉĉ ĉ tint Ġ= Ġgray , Ċĉĉĉĉ ĉ content Description Ġ= Ġnull , Ċĉĉĉĉ ĉ modifier Ġ= ĠModifier Ċĉĉĉĉĉ ĉ . padding ( end Ġ= Ġ 8 . dp ) Ċĉĉĉ ĉ ) ĊĉĉĉĉĊĉĉĉ ĉ Text ( Ċĉĉĉĉ ĉ text Ġ= Ġ" Add Ġnew Ġitem ", Ċĉĉĉĉ ĉ color Ġ= Ġblack . copy ( alpha Ġ= Ġ 0 . 8 f ), Ċĉĉĉĉ ĉ overflow Ġ= ĠText Overflow . El lipsis Ċĉĉĉ ĉ ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ //@ Preview ( show Background Ġ= Ġtrue ) Ċ @ Composable Ċ fun ĠTodo Check boxes Preview () Ġ{ Ċ ĉ val Ġcheck boxes Ġ= ĠlistOf ( Ċĉ ĉ Todo Checkbox ( Ċĉĉ ĉ title Ġ= Ġ" Item Ġ 1 ", Ċĉĉ ĉ is Complete Ġ= Ġtrue Ċĉ ĉ ), Ċĉ ĉ Todo Checkbox ( Ċĉĉ ĉ title Ġ= Ġ" Item Ġ 2 ", Ċĉĉ ĉ is Complete Ġ= Ġfalse Ċĉ ĉ ), Ċĉ ĉ Todo Checkbox ( Ċĉĉ ĉ title Ġ= Ġ" Item Ġ 3 ", Ċĉĉ ĉ is Complete Ġ= Ġtrue Ċĉ ĉ ), Ċĉ ĉ Todo Checkbox ( Ċĉĉ ĉ title Ġ= Ġ" Item Ġ 4 ", Ċĉĉ ĉ is Complete Ġ= Ġfalse Ċĉ ĉ ) Ċ ĉ ) ĊĊ ĉ Todo Check boxes ( Ċĉ ĉ value Ġ= Ġ"", Ċĉ ĉ todo Check boxes Ġ= Ġcheck boxes , Ċĉ ĉ on Checked Change Ġ= Ġ{ Ġi , Ġb Ġ-> Ġ}, Ċĉ ĉ onDelete Ġ= Ġ{}, Ċĉ ĉ on Focus Change Ġ= Ġ{}, Ċĉ ĉ on Value Change Ġ= Ġ{ Ġi , Ġs Ġ-> Ġ}, Ċĉ ĉ on New Item Ġ= Ġ{} Ċ ĉ ) Ċ } Ċ