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

paraChangesetFlow

fun <T : RealmModel> RealmResults<T>.toChangesetFlow(): Flow<CollectionChange<RealmResults<T>>>

Retorna um fluxo que monitora as alterações neste RealmResults. Ele emitirá o RealmResults atual após a assinatura. Para cada atualização do RealmResults, será enviada uma CollectionChange que consiste em um par com o RealmResults e seu OrderedCollectionChangeSet correspondente. O changeset será null na primeira vez que o RealmResults for emitido.

Os RealmResults serão emitidos continuamente à medida que forem atualizados. Esse fluxo nunca será concluído.

Os itens emitidos são congelados (consulte RealmResults.freeze). Isso significa que eles são imutáveis e podem ser lidos em qualquer thread.

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

results.toChangesetFlow()
  .map { change -> doExpensiveWork(change) }
  .flowOn(Dispatchers.IO)
  .onEach { change ->
    // ...
  }.launchIn(Dispatchers.Main)

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

val foo = results.toChangesetFlow()
  .flowOn(context)
  .first()

Exceções

UnsupportedOperationException - se a estrutura de corrotinas necessária não estiver no caminho de classe ou se a Instância de Realm correspondente não suportar fluxos.

IllegalStateException - se o Realm não tiver sido aberto em uma thread do loop de eventos.

Return
Kotlin Flow que nunca será concluído.