kotlin 拡張機能/ io.realm.kotlin/ io.realm.RealmResults / toFlow

toFlow

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

この RealmResults への変更を監視するフローを返します。 サブスクライブすると、現在の RealmResult が出力されます。 RealmResult が更新されるにつれて、RealmResult は継続的に出力されます。 onCompletionは呼び出されません。

Realm フローから出力されたアイテムは固定されます。 RealmResults.freezeを参照してください。 つまり、これらは不変で、どのスレッドからでも読み取ることができます。

Realm フローは常に、ライブ RealmResult を保持するスレッドから項目を出力します。 つまり、さらに処理が必要な場合は、計算ディスパッチで 値を収集することをお勧めします。

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

toFlow()でアイテムの発行を停止する場合は、 kotlinx.coreoutine.flow.firstを呼び出して、最初のアイテムのみを発行するようにフローに指示できます。

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

Return
onEachまたはcollectへの呼び出しを実行できる Kotlinフロー