kotlin-extensions / io.realm.kotlin / io.realm.RealmResults / toFlow

toFlow

fun <T : RealmModel> RealmResults<T>.toFlow(): Flow<RealmResults<T>>

Retorna um fluxo que monitora as alterações neste RealmResults. Ele emitirá o RealmResults atual quando for inscrito. O RealmResults será emitido continuamente à medida que o RealmResults for atualizado - onCompletion nunca será chamado.

Os itens emitidos dos fluxos de Realm são congelados — consulte RealmResults.freeze. Isso significa que eles são imutáveis e podem ser lidos em qualquer thread.

Os fluxos de domínio sempre emitem itens do thread que contém o Realm ativo. Isso significa que, se você precisar fazer processamento adicional, é recomendável coletar os valores em um despachante de computação:

realmInstance.where(Foo::class.java)
  .findAllAsync()
  .toFlow()
  .map { results -> doExpensiveWork(results) }
  .flowOn(Dispatchers.IO)
  .onEach { flowResults ->
    // ...
  }.launchIn(Dispatchers.Main)

Se quiser que toFlow() pare de emitir itens, você pode instruir o fluxo a emitir apenas o primeiro item ligando para kotlinx.coroutines.flow.first:

val foo = realmInstance.where(Foo::class.java)
  .findAllAsync()
  .toFlow()
  .flowOn(context)
  .first()

Return
Kotlin Flow em quais chamadas para onEach ou collect podem ser feitas.