惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
I
InfoQ
Jina AI
Jina AI
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
量子位
月光博客
月光博客
罗磊的独立博客
雷峰网
雷峰网
The Cloudflare Blog
V
V2EX
小众软件
小众软件
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题

博客园 - SharpCJ

Dart 线程模型和异步 Dart 基础入门 在 JetBrains IDE 中接入 OpenCode 并配置自定义模型 理解 Agent 中的 Slash Command:从概念到自定义命令实践 Harness Engineering:把 AI 真正接进工程流程 当 AI 开始写代码,谁来保证它不会翻车? Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革 拆穿名词诈骗!用大白话理解晦涩难懂的AI概念 OpenClaw 大结局——接入个人微信 Android 性能分析工具 Perfetto 的基本使用 frp 内网穿透 0.63.0 教程 LangChain入门学习 Ubuntu 下 conda 设置 ComfyUI 基础教程(六) —— 图像的局部重绘 ComfyUI 基础教程(五) —— 应用 IP-Adapter 实现图像风格迁移 ComfyUI 基础教程(四) —— 应用 LoRA 模型控制图像生成特征 ComfyUI 基础教程(三) —— 应用 Controlnet 精准控制图像生成 ComfyUI 基础教程(二) —— Stable Diffusion 文生图基础工作流及模型、常用节点介绍 ComfyUI 基础教程(一) —— 本地安装部署 Stable Diffusion 小白的入坑铺垫 GPT-SoVITS —— 5s 声音样本就可以训练模型,复刻声音的 AI 应用 LM Studio + open-webui 快速本地部署大语言模型 Jetpack Compose(9)——自定义Composable Jetpack Compose(8)——嵌套滚动 Jetpack Compose(7)——触摸反馈
Compose 延迟列表踩过的坑
SharpCJ · 2024-06-27 · via 博客园 - SharpCJ

问题

在使用 Jetpack Compose 延迟列表时遇到一个坑,简单记录一下。直接上代码:


这个代码看起来也没有什么问题,滑动正常,点击滑动到顶部也正常。
但是极端操作:在一边滑动列表一边点击按钮,就出问题了。这样再点击按钮,就不生效了。从日志来看,点击时协程发射值没有问题,但是 collect 不执行了。

如果直接在点击事件中启动协程,执行操作,就不会有问题。

Button(onClick = {
    scope.launch {
        state.animateScrollToItem(0)
    }
}){

}

那问题出现在哪里了呢?

实际上是,在点击按钮是,执行滚动的动画,同时,手滑列表,会抛出动画中断的异常,没有处理的话,会把导致 flow 的 collect 出现问题。
解决办法:

LaunchedEffect(Unit) {
    viewModel.scrollToTop.collect {
        runCatching {
            state.animateScrollToItem(0)
        }
    }
}

总结

最后总结一下,这个问题类似的情况还会有很多,其实不在于 Compose, 而是协程的异常处理。后续如果遇到协程上游正常发生值之后,下游收集出现问题,要想到出现异常的情况。最佳方案是在下游需要对可能发生的异常进行及时处理。