Digamos que tenho uma classe que emite um fluxo e uma função em outra classe que o coleta:
ISSO FUNCIONA
class DebugMessage { val sharedFlow = MutableSharedFlow<String>() fun makeFlow() { GlobalScope.launch(Dispatchers.Default) { for (i in 0 until 10) { sharedFlow.emit(Random.nextInt(1,100).toString()) delay(200) } } } fun getFlow(): Flow<String> { makeFlow() return sharedFlow } }
E
private fun collectDebugMsg() { GlobalScope.launch(Dispatchers.Default) { val getFlow = DebugMessage().getFlow() getFlow.collect { Timber.d("VALUE IS $it") } } }
Isso funciona como esperado, mas é um pouco inútil. Eu preciso dividir o makeFlow
e as getFlow
funções. Eu chamaria primeiro a makeFlow
função e depois a getFlow
função. Seria, por exemplo:
ISSO NÃO FUNCIONA
class DebugMessage { val sharedFlow = MutableSharedFlow<String>() fun makeFlow() { GlobalScope.launch(Dispatchers.Default) { for (i in 0 until 10) { sharedFlow.emit(Random.nextInt(1,100).toString()) delay(200) } } } fun getFlow(): Flow<String> { //makeFlow() // Call 'makeFlow' from outside the DebugMessage Class return sharedFlow } }
E
private fun collectDebugMsg() { GlobalScope.launch(Dispatchers.Default) { DebugMessage().makeFlow() // Call 'makeFlow' from outside the DebugMessage Class val getFlow = DebugMessage().getFlow() getFlow.collect { Timber.d("VALUE IS $it") } } }
O fluxo não está mais coletando nada. Alguém tem ideia do porquê disso?