渐进式编程课
Flutter 目录
第 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)。

官方参考