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) }