18034727885
2026-06-26 253f680fb9666751e0f9a8e5e8f2f9e3eb1894e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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() }
 
    }
 
 
}