Compose声明式逻辑问题:桌面应用两类异常行为排查
问题根源分析
问题1:TextField输入时文件列表重复执行搜索导致卡顿
在RomsList组合函数中,你直接在LazyColumn的content代码块里调用了getRomsFromFolder(folder)。Compose的重组规则是:当界面中任何可观察状态发生变化时,关联的Composable都会重新执行。TextField输入操作会触发界面重组,此时RomsList会被重新调用,而getRomsFromFolder是同步遍历文件系统的操作,每次重组都会重复扫描文件,文件数量大时必然引发卡顿。
同时,你没有对文件搜索结果做缓存处理——哪怕文件夹路径没有变化,只要重组发生,就会重复执行耗时的文件扫描,完全是冗余操作。
问题2:重新选择已选文件夹时文件列表不刷新
你当前通过listRomsState这个布尔状态触发文件列表展示:选择文件夹后将其设为true。但如果重新选择同一个文件夹,两个关键条件都不满足重组触发要求:
folderChosenPath是普通变量,没有用mutableStateOf包装,它的变化无法被Compose感知;listRomsState本来就是true,再次设置true属于状态无变更,Compose不会触发任何重组。
这就导致RomsList不会重新执行,自然不会去扫描文件夹的最新内容。
内容的提问来源于stack exchange,提问作者NullPointerException
相关产品推荐
相关产品推荐

