Skip to content

Commit 0144c88

Browse files
authored
Merge pull request #6 from lucassales2/lusa/safecollect
Safe collect
2 parents 70c66b3 + 91c2a56 commit 0144c88

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

app/src/main/java/com/monstarlab/extensions/ViewExtensions.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.monstarlab.extensions
22

33
import androidx.fragment.app.Fragment
4+
import androidx.lifecycle.DefaultLifecycleObserver
5+
import androidx.lifecycle.LifecycleOwner
46
import androidx.lifecycle.lifecycleScope
57
import kotlinx.coroutines.flow.Flow
68
import kotlinx.coroutines.flow.collect
@@ -9,13 +11,27 @@ import kotlinx.coroutines.flow.zip
911
import kotlinx.coroutines.launch
1012

1113
fun <T> Fragment.collectFlow(targetFlow: Flow<T>, collectBlock: ((T) -> Unit)) {
12-
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
13-
targetFlow.collect {
14-
collectBlock.invoke(it)
14+
safeViewCollect {
15+
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
16+
targetFlow.collect {
17+
collectBlock.invoke(it)
18+
}
1519
}
1620
}
1721
}
1822

23+
private inline fun Fragment.safeViewCollect(crossinline viewOwner: LifecycleOwner.() -> Unit) {
24+
lifecycle.addObserver(object : DefaultLifecycleObserver {
25+
override fun onCreate(owner: LifecycleOwner) {
26+
viewLifecycleOwnerLiveData.observe(
27+
this@safeViewCollect,
28+
{ viewLifecycleOwner ->
29+
viewLifecycleOwner.viewOwner()
30+
})
31+
}
32+
})
33+
}
34+
1935
fun <T1, T2> Fragment.combineFlows(flow1: Flow<T1>, flow2: Flow<T2>, collectBlock: ((T1, T2) -> Unit)) {
2036
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
2137
flow1.combine(flow2) { v1, v2 ->

0 commit comments

Comments
 (0)