package Ġro . ale xm amo . firestore pagination jet pack compose . data . repository Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . google . firebase . firestore . Query Ċ import Ġcom . google . firebase . firestore . Query Snapshot Ċ import Ġkotlinx . coroutines . tasks . await Ċ import Ġro . ale xm amo . firestore pagination jet pack compose . domain . model . Product Ċ Ċ class ĠFire store Paging Source Ġ( ĊĠĠĠ Ġprivate Ġval Ġquery Products ByName : ĠQuery Ċ ) Ġ: ĠP aging Source < Query Snapshot , ĠProduct >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Query Snapshot , ĠProduct >): ĠQuery Snapshot ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Query Snapshot >): ĠLoad Result < Query Snapshot , ĠProduct > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentPage Ġ= Ġparams . key Ġ?: Ġquery Products ByName . get (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Product Ġ= ĠcurrentPage . documents [ currentPage . size () Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Page Ġ= Ġquery Products ByName . start After ( last Visible Product ). get (). await () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠcurrentPage . to Objects ( Product :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnext Page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }