package Ġreactive circ us . flow binding . android . widget Ċ Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . widget . TextView Ċ 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 Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Initial Value Flow ] Ġof Ġtext Ġchanges Ġon Ġthe Ġ[ TextView ] Ġinstance Ċ Ġ* Ġwhere Ġthe Ġvalue Ġemitted Ġis Ġthe Ġcurrent Ġtext . Ċ Ġ* Ċ Ġ* ĠNote : ĠValues Ġemitted Ġby Ġthis Ġflow Ġare Ġ** mutable ** Ġowned Ġby Ġthe Ġhost Ġ[ TextView ] Ċ Ġ* Ġand Ġthus Ġare Ġ** not Ġsafe ** Ġto Ġcache Ġor Ġdelay Ġreading Ġ( such Ġas Ġby Ġob serving Ċ Ġ* Ġon Ġa Ġdifferent Ġthread ). ĠIf Ġyou Ġwant Ġto Ġcache Ġor Ġdelay Ġreading Ġthe Ġitems Ġemitted Ġthen Ġyou Ġmust Ċ Ġ* Ġmap Ġvalues Ġthrough Ġa Ġfunction Ġwhich Ġcalls Ġ[ String . valueOf ()] Ġor Ċ Ġ* Ġ[ CharSequence . toString ()] Ġto Ġcreate Ġa Ġcopy . Ċ Ġ* Ċ Ġ* ĠNote : ĠCreated Ġflow Ġkeeps Ġa Ġstrong Ġreference Ġto Ġthe Ġ[ TextView ] Ġinstance Ċ Ġ* Ġuntil Ġthe Ġcoroutine Ġthat Ġlaunched Ġthe Ġflow Ġcollector Ġis Ġcancelled . Ċ Ġ* Ċ Ġ* ĠExample Ġof Ġusage : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠtextView . text Changes () Ċ Ġ* ĠĠĠĠ Ġ. on Each Ġ{ Ġtext Ġ-> Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġtext Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġ. launch In ( ui Scope ) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ @ Check Result Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ public Ġfun ĠTextView . text Changes (): ĠInitial Value Flow < CharSequence > Ġ= Ġcallback Flow Ġ{ ĊĠĠĠ Ġcheck MainThread () ĊĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Send ( s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ= ĠUnit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġadd TextChanged Listener ( listener ) ĊĠĠĠ Ġawait Close Ġ{ Ġremove TextChanged Listener ( listener ) Ġ} Ċ } ĊĠĠĠ Ġ. conf late () ĊĠĠĠ Ġ. as Initial Value Flow Ġ{ Ġtext Ġ} Ċ