package Ġreactive circ us . flow binding . android . widget Ċ Ċ import Ġandroid . widget . Rating Bar Ċ import Ġandroidx . annotation . Check Result Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ import Ġkotlinx . coroutines . flow . conf late Ċ import Ġreactive circ us . flow binding . common . Initial Value Flow Ċ import Ġreactive circ us . flow binding . common . as Initial Value Flow Ċ import Ġreactive circ us . flow binding . common . check MainThread Ċ import Ġreactive circ us . flow binding . common . safe Offer Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Initial Value Flow ] Ġof Ġrating Ġchanges Ġon Ġthe Ġ[ Rating Bar ] Ġinstance Ċ Ġ* Ġwhere Ġthe Ġvalue Ġemitted Ġis Ġthe Ġcurrent Ġrating . Ċ Ġ* Ċ Ġ* ĠNote : ĠCreated Ġflow Ġkeeps Ġa Ġstrong Ġreference Ġto Ġthe Ġ[ Rating Bar ] Ġinstance Ċ Ġ* Ġuntil Ġthe Ġcoroutine Ġthat Ġlaunched Ġthe Ġflow Ġcollector Ġis Ġcancelled . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġusage : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġrating Bar . rating Changes () Ċ Ġ* ĠĠĠĠ Ġ. on Each Ġ{ Ġrating Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġrating Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġ. launch In ( ui Scope ) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ @ Check Result Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ public Ġfun ĠRating Bar . rating Changes (): ĠInitial Value Flow < Float > Ġ= Ġcallback Flow Ġ{ ĊĠĠĠ Ġcheck MainThread () ĊĠĠĠ Ġval Ġlistener Ġ= ĠRating Bar . On Rating Bar ChangeListener Ġ{ Ġ_, Ġrating , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġsafe Offer ( rating ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġon Rating Bar ChangeListener Ġ= Ġlistener ĊĠĠĠ Ġawait Close Ġ{ Ġon Rating Bar ChangeListener Ġ= Ġnull Ġ} Ċ } ĊĠĠĠ Ġ. conf late () ĊĠĠĠ Ġ. as Initial Value Flow Ġ{ Ġrating Ġ} Ċ