第 19 课2026.09.23
让详情页返回后的点击处理器只负责判断结果,由独立方法修改原列表行。
第 19 课:提取列表行更新方法
- 日期:2026-09-23
- 课程序号:第 19 课
- 知识点:从返回结果中提取局部状态更新方法
用途或适用场景
让详情页返回后的点击处理器只负责判断结果,由独立方法修改原列表行。
核心概念
setState 的回调同步修改已有 lessons;异步 Navigator.push 仍在回调外等待。
最小代码或操作示例
dart
void markSaved(int index) {
setState(() => lessons[index] = '已完成:${lessons[index]}');
}
Future<void> openLesson(int index) async {
final saved = await Navigator.push<bool>(
context,
MaterialPageRoute(builder: (detailContext) => Scaffold(
body: TextButton(
onPressed: () => Navigator.pop(detailContext, true),
child: Text(lessons[index]),
),
)),
);
if (!mounted) return;
if (saved == true) markSaved(index);
}3~5 分钟练习
让列表行点击时调用 openLesson(index),观察返回 false 的情况。
参考答案
onTap: () => openLesson(index);返回 false 时不调用 markSaved,原行保持不变。
与上一课的联系
沿用第 18 课的 openLesson、Navigator.push<bool>、saved、挂载检查和同一 lessons[index];本课只把原有 setState 更新提取为 markSaved;完成后下一课可让详情页返回更具体的编辑结果。
时效校验
时效校验:2026-09-24(Flutter 当前 State.setState、State.mounted 与 Navigator.pop API;未见本课用法的废弃标记;setState 回调不可为 async)。