package com.example.basecore.base import androidx.lifecycle.viewModelScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch /** * 绑定context会泄漏,vm生命周期必定长过activity,需要的时候方法传参即可 */ open class BaseContextViewModel : BaseViewModel() { fun searchFilter(str: String, doSearch: (String) -> Unit) { flow { emit(str) } .filter { it.isNotEmpty() } .debounce(500) .flowOn(Dispatchers.Default) .onEach { doSearch(it) }.flowOn(Dispatchers.Main) .launchIn(viewModelScope) } fun launchOnUI(block: suspend CoroutineScope.() -> Unit) { viewModelScope.launch { block() } } }