第 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;泛型结果与空返回语义未见废弃标记)。