33 lines
909 B
Kotlin
33 lines
909 B
Kotlin
package com.sw.dualscreen.utils
|
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.Job
|
|
import kotlinx.coroutines.delay
|
|
import kotlinx.coroutines.flow.flow
|
|
import kotlinx.coroutines.flow.flowOn
|
|
import kotlinx.coroutines.flow.launchIn
|
|
import kotlinx.coroutines.flow.onCompletion
|
|
import kotlinx.coroutines.flow.onEach
|
|
import kotlinx.coroutines.flow.onStart
|
|
|
|
// 倒计时Flow扩展函数
|
|
fun countDownByFlow(
|
|
total: Int,
|
|
scope: CoroutineScope,
|
|
onTick: (Int) -> Unit,
|
|
onStart: (() -> Unit)? = null,
|
|
onFinish: (() -> Unit)? = null
|
|
): Job {
|
|
return flow {
|
|
for (i in total downTo 0) {
|
|
emit(i)
|
|
if (i != 0) delay(1000)
|
|
}
|
|
}.flowOn(Dispatchers.Main)
|
|
.onStart { onStart?.invoke() }
|
|
.onCompletion { onFinish?.invoke() }
|
|
.onEach { onTick.invoke(it) }
|
|
.launchIn(scope)
|
|
}
|