Spot the bug
Collecting this flow fails at once with IllegalStateException, and the listener is never unregistered. Which line is missing a step?
fun ConnectivityManager.isOnline(): Flow<Boolean> = callbackFlow {val callback = object : ConnectivityManager.NetworkCallback() {override fun onAvailable(network: Network) { trySend(true) }override fun onLost(network: Network) { trySend(false) }}registerDefaultNetworkCallback(callback)}
Hint 1 of 1
What should happen when the collector cancels?
Choose an answer, then open Show answer below to check it.
Show answer
- Answer: line 6
registerDefaultNetworkCallback(callback)
Nothing keeps the flow open or unregisters the callback: callbackFlow throws IllegalStateException when its block returns without awaitClose, and the registered callback is never removed. After registering, add awaitClose { unregisterNetworkCallback(callback) }.