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