Flutter路由跳转至TodoTasks页时整体冻结,重启程序与电脑仍无效
问题定位
应用冻结的核心原因是TodoTasks页面列表项构建逻辑中存在无限死循环,直接阻塞了Flutter的单线程UI渲染流程,导致所有交互、渲染操作都无法执行,表现为应用完全无响应。
具体问题代码
在ListView.builder的itemBuilder回调里,你误将用于单次布尔判断的if写成了while,且循环体内没有修改循环条件的变量:
IconData _bookmark = Icons.bookmark_border; // 错误代码 while (tasks[index].favourited == true) { _bookmark = Icons.bookmark; } while (tasks[index].favourited == false) { _bookmark = Icons.bookmark_border; }
只要tasks[index].favourited的值是明确的true或者false,程序就会进入对应while循环后永远无法退出,直接卡死整个应用。
为什么未修改代码也会出现问题
这种情况通常是因为之前运行时Task类的favourited字段默认值为null,两个while的判断条件(等于true/等于false)都不成立,不会进入循环。这次启动可能因为运行状态残留、类默认值变更等原因,favourited被赋值为明确的布尔值,触发了死循环。
修复方案
将上述两个while循环替换为if判断即可,逻辑本身只需要根据favourited的值设置一次图标,不需要循环:
IconData _bookmark = Icons.bookmark_border; // 正确代码 if (tasks[index].favourited == true) { _bookmark = Icons.bookmark; } if (tasks[index].favourited == false) { _bookmark = Icons.bookmark_border; }
也可以直接简化为三元表达式,减少冗余代码:
IconData _bookmark = tasks[index].favourited ? Icons.bookmark : Icons.bookmark_border;
其他潜在优化点
- 当前
_currentIndex、_requestedPage定义在build方法内部,每次页面重建都会被重置,建议移动到State类的成员变量中。 - 点击底部导航跳转时建议增加判断,若当前已经是目标页,无需重复执行跳转逻辑。
内容的提问来源于stack exchange,提问作者LWB
相关产品推荐
相关产品推荐

