callbackFlow

Callback 을 Flow 로 변경하는 Flow Builder

callbackFlow

callbackFlow


CallbackFlow 로 변경하는 Flow Builder 이다.

FlowListener 내부의 스코프가 다르기 때문에 Listener 내부에서 emit() 을 사용하여 데이터를 보낼 수 없는데, callbackFlow 를 사용하면 Listener 내부의 값을 Flow 로 보낼 수 있다.

fun EditText.textChanges(): Flow<CharSequence?> =
    callbackFlow {
        val listener = object: TextWatcher {
            override fun afterTextChanged(s: Editable?) = Unit
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { trySend(s) }
        }
        addTextChangedListener(listener)
        awaitClose { removeTextChangedListener(listener) }
    }.onStart { emit(text) }
essential