[正确]的使用Kotlin Flow进行搜索优化,flutter二维码扫描插件

本文分析了一篇关于Kotlin Flow在搜索优化中错误的使用示例,指出在文本输入框事件处理中错误地在每次回调时创建新的Flow。通过简化代码展示了正确的Flow逻辑,强调了限流的正确位置。同时提到了Flutter的二维码扫描插件,并分享了一套针对算法学习的资料,旨在帮助开发者提升面试通过率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错在了哪


我先把那篇文章中错误的代码贴上来:

// 错误代码🙅

binding.etSearch.doOnTextChanged { text, _, _, _ ->

searchFilter(text.toString())

}

private fun searchFilter(str:String){

flow { emit(str) }

.debounce(400)

.filter {

it.isNotEmpty()

}

.catch { LogUtils.d(it.message) }

.flowOn(Dispatchers.Default)

.onEach {

LogUtils.d(“输出:$it”)

binding.tvShow.text = it.toString()

}.flowOn(Dispatchers.Main)

.launchIn(lifecycleScope)

}

复制代码

仔细看上面的代码,你们自己想想错在了哪里?

文本输入框etSearch每次文本的变化都会回掉searchFilter()方法,而方法里面每次都去实例化了一个flow,然后又使用了debounce()限流,那么这个debounce()限流的意义何在?毫无意义啊,对吧。因为每次都是新创建的flow啊。

还不懂的话,那就看下面简化的代码:

// 文章错误代码🙅的简化

for (i in 0…100) {

// 模拟生成数据

flow {

emit(i)

}.debounce(500) // 这里是无效的 限流,因为 flow 的 emit 只执行了一次啊……

.collect {

println("----------------->>> $it")

}

}

复制代码

那么我们理想中的正确代码逻辑是这样的:

flow {

for (i in 0…100) {

// 模拟生成数据

emit(i)

}

}.debounce(500) // 这里是有效的 限流

.collect {

println("----------------->>> $it")

}

复制代码

好了,同学们可以再对比以上两段代码,for循环就是我们模拟的输入数据,这个for循环在里面和在外面是两个完全不一样的逻辑~不再多做解释了

正确的用法


你以为的正确写法

对于输入框的这类业务逻辑,单纯使用flow是无法到达目的的,因为写不出来。有的小朋友要站起来高喊了,“怎么写不出来,你瞎说,我来写”,一顿操作写出了下面的代码:

// 小朋友写的错误代码🙅

flow {

editText.doAfterTextChanged { text ->

emit(text) // 这里是错误的,emit不可以写在内部类中

}

}.debounce(500)

总结

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。

这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。

部分资料展示:




有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

资料获取方法:点赞+关注+转发,然后进入我的【GitHub】,里面有免费获取途径

.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md),里面有免费获取途径**

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值