作为Flow

摘要 乐趣 asFlow(keyPaths : List < String > ? = null): Flow<SingleQueryChange<t>>

观察满足查询条件的第一个对象的更改。 如果查询所表示的第一个对象发生任何更改,该流程将发出SingleQueryChange事件。 该流程将无限期地继续运行,直到取消。

如果订阅空查询,则流将发出 PendingObject 事件以表明查询为空,然后为第一个元素生成 InitialObject 事件。 在非空列表上,它将开始为其第一个元素发出 InitialObject 事件。

订阅并观察到 InitialObject 事件后,如果修改了第一个元素,则会观察到连续的 UpdatedObject 实例。 如果元素被删除,DeletedObject 则会产生异常。

如果第一个元素被替换为新值,则新的头部会产生一个 InitialObject,并且其所有更改都会跟随 UpdatedObject。

                  ┌───────┐
┌─────┤ Start ├───┐
│ └───────┘ ├────┐──────────┬─────┐
┌───────▼───────┐ ┌───────▼────┴──┐ ┌─────┴─────▼───┐
│ PendingObject ├─► InitialObject │ │ UpdatedObject │
└───────────────┘ └───────▲───────┘ └───────────┬───┘
│ ┌───────────────┐ │
└──► DeletedObject ◄──┘
└───────────────┘

变更计算将在 RealmConfiguration.Builder.notificationDispatcher 表示的线程上运行。

该流具有Channel.BUFFERED的内部缓冲区,但如果使用者未能及时使用元素,则协程作用域将被取消,并引发 CancellationException。

返回

表示因运行此查询而对 RealmObject 或 EmbeddedRealmObject 进行更改的流。

参数

路径

可选属性列表,用于定义何时对对象进行更改将导致发出更改。 可以使用点语法定义嵌套属性,例如 parent.child.name 。 如果未提供键路径,则对所有顶级属性和 4 级以下的嵌套属性的更改都将trigger更改。

抛出异常

如果提供的键路径无效。