Slide 31
Slide 31 text
Sealed Classes
Sealed Classes + Flow to simplify
the usage of the Realtime
Database.
fun DatabaseReference.childrenFlow() =
callbackFlow {
val listener = addChildEventListener(object :
ChildEventListener {
override fun onChildAdded(ds: DataSnapshot,
s: String?) {
runCatching { offer(Child.Added(ds, s)) }
}
override fun onChildChanged(ds: DataSnapshot,
s: String?) {
runCatching { offer(Child.Changed(ds, s)) }
}
// ... onChildMoved, onChild Removed
override fun onCancelled(databaseError:
DatabaseError) { close(databaseError) }
})
awaitClose {
listener.remove()
}
}