Skip to content

Instantly share code, notes, and snippets.

@rohitjakhar
Last active October 4, 2021 14:14
Show Gist options
  • Save rohitjakhar/15b9969a7de1c80a02485af380b17067 to your computer and use it in GitHub Desktop.
Save rohitjakhar/15b9969a7de1c80a02485af380b17067 to your computer and use it in GitHub Desktop.
Firebase Realtime Genric Callback
@ExperimentalCoroutinesApi
inline fun <reified T> DatabaseReference.observeValue(): Flow<NetworkResponse<List<T>>> =
callbackFlow {
val listener = object : ValueEventListener {
override fun onCancelled(error: DatabaseError) {
trySend(NetworkResponse.Failure(message = error.message))
}
override fun onDataChange(snapshot: DataSnapshot) {
val hostList = arrayListOf<T>()
snapshot.children.forEach {
it.getValue(T::class.java)?.let { it1 -> hostList.add(it1) }
}
trySend(
NetworkResponse.Success(data = hostList.toList(), message = "Success")
)
}
}
addValueEventListener(listener)
awaitClose {
removeEventListener(listener)
}
}.catch {
emit(NetworkResponse.Failure(it.localizedMessage))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment