渐进式编程课
Flutter 目录
第 20 课2026.09.24

详情页修改课程名称后把新标题传回原列表行。

第 20 课:详情页返回编辑后的标题

  • 日期:2026-09-24
  • 课程序号:第 20 课
  • 知识点:带具体结果的 Navigator.pop<String>

用途或适用场景

详情页修改课程名称后把新标题传回原列表行。

核心概念

将上一课的布尔结果改成 String;Navigator.push<String> 与 Navigator.pop(context, title) 类型对应。取消返回时结果为 null。

最小代码或操作示例

dart
// 写在列表页 State 类中,沿用 lessons 与列表行的 index。
void renameLesson(int index, String title) {
  setState(() => lessons[index] = title);
}

Future<void> openLesson(int index) async {
  final title = await Navigator.push<String>(
    context,
    MaterialPageRoute(builder: (detailContext) => Scaffold(
      body: TextButton(
        onPressed: () => Navigator.pop(detailContext, '${lessons[index]} 入门'),
        child: Text(lessons[index]),
      ),
    )),
  );
  if (!mounted) return;
  if (title != null) renameLesson(index, title);
}

3~5 分钟练习

不点击保存按钮,直接返回列表页。

参考答案

title 为 null,原列表行不修改。

与上一课的联系

沿用第 19 课的 openLesson、挂载检查和抽出的同步更新方法;本课只把返回结果由布尔值改为具体标题,并据此更新同一 lessons[index];完成后下一课可在详情页用输入框编辑标题。

时效校验

时效校验:2026-09-24(Flutter 当前 Navigator.push、Navigator.pop、State.mounted API;泛型结果与空返回语义未见废弃标记)。

官方参考