渐进式编程课

搜索全部课程

输入主题、API 或概念,从 683 节课程中快速定位。

683 节课程
  1. 第 1 课UIAbility 与 ArkUI 页面基础适用场景:理解应用启动后第一屏如何加载,以及如何编写第一个 ArkUI 页面2026.07.02
  2. 第 1 课KMP 源码集与代码共享Kotlin Multiplatform(KMP)让 Android、iOS 等平台共享业务代码,同时保留调用各平台原生 API 的能力。理解源码集,是后续学习网络请求、数据存储和 Compose Multiplatform 的基础。2026.07.17
  3. 第 1 课Widget 与最小界面结构Widget 是 Flutter UI 的基本单元。文本、布局、按钮乃至整个页面都通过 Widget 树进行组合。2026.08.28
  4. 第 1 课变量、基本类型与 print变量是 Python 程序组织数据的起点。后续的判断、循环、函数和数据处理都会读取或修改变量。2026.08.28
  5. 第 1 课变量绑定与可变性明确数据是否允许变化,可以让状态修改更容易追踪,也是理解 Rust 所有权和并发安全的基础。2026.08.28
  6. 第 1 课main 与标准输出每个可执行 C++ 程序都从 main() 开始。标准输出能帮助我们看到程序结果和调试信息。2026.08.31
  7. 第 1 课程序入口与控制台输出C 控制台程序适合学习语法、编写工具和验证业务逻辑,程序从 Main() 方法开始执行。2026.08.31
  8. 第 1 课main 包与标准输出Go 可执行程序由 main 包启动。标准输出是验证程序流程和结果的最直接方式。2026.08.31
  9. 第 1 课文档结构与语义标签HTML 描述网页内容的结构。清晰的语义标签能帮助浏览器、搜索引擎和辅助技术理解页面。2026.08.31
  10. 第 1 课类、main 与标准输出Java 代码组织在类中,可执行程序从固定签名的 main() 方法开始。2026.08.31
  11. 第 1 课val、var 与类型推断变量是 Kotlin 程序保存数据的基础。优先使用不可重新赋值的 val,能让状态变化更容易追踪。2026.08.31
  12. 第 1 课组件与 JSXReact 用组件拆分界面。每个函数组件接收数据并返回 JSX,适合组合成更大的页面。2026.08.31
  13. 第 1 课View、Text 与基础界面React Native 使用原生基础组件组合移动界面,而不是直接使用网页的 div 和 p 标签。2026.08.31
  14. 第 1 课应用实例与模板插值Vue 可以把 JavaScript 数据声明式地显示到 HTML 模板中,数据变化后界面会自动更新。2026.08.31
  15. 第 1 课Activity 与最小应用入口Activity 承载用户可以看到和操作的一个 Android 界面。理解它的创建入口,是学习布局、状态和导航的第一步。2026.09.01
  16. 第 1 课对象模式与基础对象对象模式是整理场景和摆放整体对象的起点。先区分对象操作与几何编辑,能避免在错误模式下找不到命令。2026.09.01
  17. 第 1 课对象管理器与基础对象先学会在对象管理器中看懂和整理场景,之后建模、绑定、动画和渲染时才不容易选错对象或弄乱层级。2026.09.01
  18. 第 1 课Node 与 ComponentCocos Creator 使用节点组织场景,并通过组件为节点添加行为。掌握节点与组件的关系后,就能继续处理移动、碰撞和交互。2026.09.01
  19. 第 1 课项目、媒体池与时间线DaVinci Resolve 把剪辑、调色、特效和音频工作放在同一个项目里。先整理媒体池和时间线,能让后续各页面共享清楚的素材结构。2026.09.01
  20. 第 1 课资源库、事件与项目先理清资源库、事件和项目的关系,才能稳定地组织素材、剪辑版本与交付文件,避免后期找不到片段。2026.09.01
  21. 第 1 课项目、群组与图层Motion 的动画与特效都建立在图层层级上。先学会用群组组织图层,后面才能一次控制一组对象或只修改其中一层。2026.09.01
  22. 第 1 课程序入口与消息发送ObjectiveC 程序从 main 函数开始执行。方括号表达式用于向对象发送消息,是阅读和编写 ObjectiveC 代码的基础。2026.09.01
  23. 第 1 课图层与非破坏编辑图层能把照片、文字、形状和调色分开管理。保留原图并使用调整图层,可以随时回退和修改,而不必破坏原始像素。2026.09.01
  24. 第 1 课骨骼、插槽与附件Spine 通过骨骼控制姿势,通过插槽决定绘制顺序,再由附件提供实际显示内容。理解这三层关系,是制作和接入 2D 骨骼动画的基础。2026.09.01
  25. 第 1 课let、var 与类型推断常量和变量用于保存程序数据。优先使用值不会变化的 let,能让 Swift 代码的意图更清晰。2026.09.01
  26. 第 1 课View 与最小界面SwiftUI 使用遵循 View 协议的类型描述界面。掌握最小 View 结构后,就能继续组合布局、状态和交互。2026.09.01
  27. 第 1 课GameObject 与 MonoBehaviourUnity 使用 GameObject 表示场景中的对象,并通过组件为对象添加能力。游戏脚本通常继承 MonoBehaviour,从而接入引擎生命周期。2026.09.01
  28. 第 1 课Actor 与 BeginPlayActor 是虚幻引擎关卡中可以放置或生成的基础对象。自定义 Actor 后,可以为机关、道具和游戏规则添加行为。2026.09.01
  29. 第 2 课@State 状态驱动 UI适用场景:计数、开关、输入内容、选中项等会变化的页面数据2026.07.03
  30. 第 2 课KMP 目标与 Gradle 配置KMP 不会自动决定要支持哪些平台。我们需要在共享模块的 Gradle 配置中声明 Android、iOS 等目标,Gradle 才知道同一份共享代码要编译成哪些平台产物。2026.07.18
  31. 第 2 课StatelessWidget 与 build 职责页面内容增多后,把可复用区域拆成独立 Widget 能减少重复代码,也能让每个组件只负责一小块界面。2026.08.31
  32. 第 2 课input 输入与类型转换交互式脚本需要接收姓名、数量、价格等输入。明确输入的类型,才能正确完成加减乘除,而不是把文本直接拼接起来。2026.08.31
  33. 第 2 课标量类型与类型标注数值范围和精度会影响计算结果与内存使用。明确类型可以让函数参数、解析结果和跨模块接口更加清晰。2026.08.31
  34. 第 2 课变量与初始化变量保存运行数据,初始化确保变量从一开始就有明确值。2026.09.01
  35. 第 2 课变量与值类型保存数量、价格和真假状态,并生成可读输出。2026.09.01
  36. 第 2 课变量与零值保存程序数据,并理解未显式初始化的变量仍有确定值。2026.09.01
  37. 第 2 课链接与图片链接连接页面和资源,图片提供视觉信息,替代文本改善可访问性。2026.09.01
  38. 第 2 课变量与基本类型保存数量、价格、真假状态和文本,为条件判断与计算打基础。2026.09.01
  39. 第 2 课基本类型与字符串模板表达数量、价格和状态,并将数据组合成清晰文本。2026.09.01
  40. 第 2 课Props 组件传参让父组件把不同数据传给同一个子组件,复用界面结构。2026.09.01
  41. 第 2 课Flexbox 基础布局控制移动界面元素的排列、间距和对齐。2026.09.01
  42. 第 2 课vbind 属性绑定让链接地址、图片路径和禁用状态等属性随响应式数据变化。2026.09.01
  43. 第 2 课XML中的TextView在上一课 Activity 中显示一条可读文字。2026.09.02
  44. 第 2 课精确变换与数值输入按确定距离移动对象并复现相同场景。2026.09.02
  45. 第 2 课坐标面板与局部变换准确摆放父子对象,而不是仅凭视口拖动。2026.09.02
  46. 第 2 课节点局部坐标与变换在 Cocos Creator 3.x 中相对父节点摆放子节点。2026.09.02
  47. 第 2 课时间线选择裁切与播放缩短片段开头或结尾,留下需要的内容。2026.09.02
  48. 第 2 课导入媒体与界面区域把练习素材加入已有事件,并确认导入成功。2026.09.02
  49. 第 2 课位置关键帧动画让上一课的标题组从左向右移动。2026.09.02
  50. 第 2 课对象指针与基础类型区分对象引用和直接保存的基础值。2026.09.02
  51. 第 2 课矩形选区与局部填充只修改画面指定区域,同时保留原图。2026.09.02
  52. 第 2 课骨骼父子层级用上臂带动前臂,避免逐个移动骨骼。2026.09.02
  53. 第 2 课基础类型与字符串插值用明确类型描述一条学习记录。2026.09.02
  54. 第 2 课VStack纵向布局将标题和说明组合成纵向信息块。2026.09.02
  55. 第 2 课Transform局部变换相对父对象摆放一个游戏物体。2026.09.02
  56. 第 2 课根组件与场景组件理解 Actor 的位置和组件附着关系。2026.09.02
  57. 第 3 课组件拆分与 @Prop 父传子适用场景:父组件持有状态,子组件只负责展示局部 UI2026.07.06
  58. 第 3 课使用 expect/actual 对接平台能力共享业务有时需要读取系统版本、设备名称等平台信息。commonMain 不能直接调用 Android 或 iOS API,此时可以用 expect/actual 把平台差异隔离在对应源码集中。2026.07.19
  59. 第 3 课StatefulWidget 与 setState让界面响应点击并更新计数等局部交互状态。2026.09.01
  60. 第 3 课算术运算符与计算顺序用于价格、时长和数量等基础计算。2026.09.01
  61. 第 3 课元组与数组元组组合少量不同类型的值,数组保存固定数量的同类型值。2026.09.01
  62. 第 3 课if条件分支根据分数选择不同输出。2026.09.02
  63. 第 3 课if与else条件判断为控制台成绩程序增加分类行为。2026.09.02
  64. 第 3 课if条件与分支根据输入数据选择执行路径。2026.09.02
  65. 第 3 课有序与无序列表表达材料清单和有先后关系的操作步骤。2026.09.02
  66. 第 3 课if与else分支按成绩生成不同评价。2026.09.02
  67. 第 3 课if表达式直接根据条件生成文本值。2026.09.02
  68. 第 3 课点击事件与回调让组件向用户操作作出响应。2026.09.02
  69. 第 3 课StyleSheet样式复用整理重复布局和文字样式。2026.09.02
  70. 第 3 课von点击事件通过按钮修改页面显示的学习次数。2026.09.02
  71. 第 3 课Button与点击监听让页面中的按钮响应一次点击并修改提示文字。2026.09.03
  72. 第 3 课复制对象与独立变换快速摆出两个相同物体,并独立调整它们的位置。2026.09.03
  73. 第 3 课参数化立方体与圆角把基本立方体做成可继续调整的圆角盒子。2026.09.03
  74. 第 3 课update与按时间移动让一个可见节点以固定的局部单位每秒速率向右运动。2026.09.03
  75. 第 3 课刀片分割与片段边界把一段时间线视频分成可分别选择的两部分。2026.09.03
  76. 第 3 课追加片段到主故事线把已经导入的素材按顺序放进一个可播放项目。2026.09.03
  77. 第 3 课淡入淡出行为给标题增加出现和消失的过程,不逐个手动设置透明度关键帧。2026.09.03
  78. 第 3 课if分支与BOOL条件根据一次练习是否达标输出反馈。2026.09.03
  79. 第 3 课选区转换为图层蒙版隐藏色块的一部分而不删除原始像素。2026.09.03
  80. 第 3 课旋转关键帧与动画模式让上臂带动前臂完成一次简单摆动。2026.09.03
  81. 第 3 课if与else条件选择用练习分数生成不同的反馈文字。2026.09.03
  82. 第 3 课HStack与Spacer横向布局制作左侧标题、右侧状态的课程行。2026.09.03
  83. 第 3 课Update与按时间旋转让 Cube 按每秒固定角度连续转动。2026.09.03
  84. 第 3 课蓝图实例变量让同一个 Actor 蓝图的两个关卡实例输出不同的课程名称。2026.09.03
  85. 第 4 课@Link 双向状态同步适用场景:子组件中的按钮、开关或输入框需要修改父组件状态2026.07.07
  86. 第 4 课用 commonTest 测试共享逻辑共享代码会同时影响 Android 和 iOS,因此越接近业务核心,越应该先用测试固定行为。写在 commonTest 的测试可以随不同平台目标执行,避免为同一条业务规则重复写多套测试。2026.07.20
  87. 第 4 课状态提升与回调让显示计数和增加计数的组件共享一份交互状态。2026.09.02
  88. 第 4 课比较运算与布尔值把计算结果变成可判断的条件。2026.09.02
  89. 第 4 课函数参数与返回值把重复计算封装为有输入和输出的函数。2026.09.02
  90. 第 4 课for循环与累加用一个循环计算连续整数总和。2026.09.03
  91. 第 4 课for循环与累计结果避免为了多次练习重复写相同的计算语句。2026.09.03
  92. 第 4 课for循环与累加器求连续整数的总和,认识 Go 的重复执行入口。2026.09.03
  93. 第 4 课label与文本输入框为学习计划建立一个可识别、可聚焦的文本输入字段。2026.09.03
  94. 第 4 课for循环与计数器统计连续几天的练习分钟数。2026.09.03
  95. 第 4 课when表达式与多分支把课程状态编号转换成可读名称。2026.09.03
  96. 第 4 课useState保存交互状态把上一课按钮点击变成页面上可见的练习次数。2026.09.03
  97. 第 4 课Pressable点击与按压反馈把静态文字卡片变成有按压反馈的操作入口。2026.09.03
  98. 第 4 课vif与velse条件渲染根据完成状态切换练习提示。2026.09.03
  99. 第 4 课LinearLayout纵向组合把提示文字和按钮放在同一个页面。2026.09.04
  100. 第 4 课Collection整理对象把复制出的盒子放进一个命名集合。2026.09.04
  101. 第 4 课Null分组与整体移动把两个圆角盒子作为一个整体摆放。2026.09.04
  102. 第 4 课property暴露移动速度在 Inspector 调整节点速度。2026.09.04
  103. 第 4 课Inspector静态缩放只放大分割后的一个片段,调整画面构图。2026.09.04
  104. 第 4 课修剪片段尾部与波纹移动去掉第一段视频结尾多余的一秒。2026.09.04
  105. 第 4 课复制图层与独立编辑从现有标题制作第二条可独立编辑的标题。2026.09.04
  106. 第 4 课for循环与整数累加计算若干次练习的累计值。2026.09.04
  107. 第 4 课亮度对比度调整图层可撤回地调整练习图像的明暗。2026.09.04
  108. 第 4 课线性与阶梯插值比较平滑摆动和逐帧跳转的差异。2026.09.04
  109. 第 4 课forin与闭区间累计 5 次练习的序号。2026.09.04
  110. 第 4 课State与Button交互把静态课程行变为点击计数练习。2026.09.04
  111. 第 4 课SerializeField暴露旋转速度让两个 Cube 使用不同转速而无需复制脚本。2026.09.04
  112. 第 4 课Branch与布尔实例配置让 Actor 根据开关决定是否输出课程名称。2026.09.04
  113. 第 5 课ForEach 与稳定 Key适用场景:菜单、消息列表、股票列表、设置项、搜索结果等重复结构2026.07.08
  114. 第 5 课KMP 共享协程基础网络请求、数据库读取等操作不会立即完成。KMP 可以在共享代码中用协程统一描述这些异步任务,让 Android 和 iOS 复用同一套业务流程。2026.07.21
  115. 第 5 课父级约束与SizedBox解释为什么写了宽度 200,组件却只能显示为宽度 120。2026.09.03
  116. 第 5 课if与elif条件分支根据分数输出一条评价。2026.09.03
  117. 第 5 课if表达式与分支类型让函数根据条件返回不同价格。2026.09.03
  118. 第 5 课函数参数与返回值复用上一课的求和逻辑,避免复制循环。2026.09.04
  119. 第 5 课静态方法与参数复用上一课的求和逻辑,避免复制循环。2026.09.04
  120. 第 5 课函数参数与结果复用上一课的求和逻辑,避免复制循环。2026.09.04
  121. 第 5 课form与按钮类型把输入字段组成可提交的练习表单。2026.09.04
  122. 第 5 课静态方法与返回值复用上一课的求和逻辑,避免复制循环。2026.09.04
  123. 第 5 课for循环与整数范围重复累计每日练习的序号。2026.09.04
  124. 第 5 课事件中的状态快照解释同一次点击连续两次设置为何只加一。2026.09.04
  125. 第 5 课useState与点击计数让 Pressable 点击次数显示在页面上。2026.09.04
  126. 第 5 课vshow与显示切换频繁显示或隐藏一条辅助提示。2026.09.04
  127. 第 5 课TextView与资源字符串在 XML 页面显示可本地化的课程标题。2026.09.07
  128. 第 5 课对象父子关系让一个盒子跟随另一个对象整体移动。2026.09.07
  129. 第 5 课转为可编辑对象在点、边、面编辑前复制并转换立方体。2026.09.07
  130. 第 5 课键盘输入控制方向按左右键控制节点移动。2026.09.07
  131. 第 5 课Transform缩放关键帧让右侧片段从原尺寸缓慢放大。2026.09.07
  132. 第 5 课刀片切分片段把一个片段在播放头位置分成两段。2026.09.07
  133. 第 5 课Link行为同步参数让第二个标题的位置跟随第一个标题。2026.09.07
  134. 第 5 课NSArray不可变数组顺序读取一组课程名称。2026.09.07
  135. 第 5 课调整图层蒙版限定区域只让亮度调整影响照片的一部分。2026.09.07
  136. 第 5 课贝塞尔曲线缓入缓出让摆臂从慢到快再变慢。2026.09.07
  137. 第 5 课数组与forin遍历遍历一组学习主题。2026.09.07
  138. 第 5 课Binding双向传值让子视图编辑父视图持有的计数。2026.09.07
  139. 第 5 课输入轴驱动移动用键盘水平移动一个物体。2026.09.07
  140. 第 5 课自定义事件复用执行流把重复提示逻辑封装为蓝图事件。2026.09.07
  141. 第 6 课List 与 ListItem适用场景:设置页、消息列表、搜索结果、行情列表、学习目录2026.07.09
  142. 第 6 课用 Flow 表达共享数据流一次网络请求通常返回一个结果,适合使用 suspend;行情、数据库列表、登录状态等数据会持续变化,更适合使用 Flow。KMP 可以在共享层定义数据流,再由 Android 和 iOS 观察同一套业务数据。2026.07.22
  143. 第 6 课Row与Expanded分配宽度在一行中放置等宽的两块内容。2026.09.04
  144. 第 6 课逻辑运算与组合条件同时检查练习时长和完成情况。2026.09.04
  145. 第 6 课for循环与范围计算从 1 到 5 的总和。2026.09.04
  146. 第 6 课数组与范围for保存并遍历一组分数。2026.09.07
  147. 第 6 课数组与foreach汇总多次练习时长。2026.09.07
  148. 第 6 课切片与range遍历遍历可变长度的一组练习时长。2026.09.07
  149. 第 6 课input类型与基础校验在提交前检查常见输入格式。2026.09.07
  150. 第 6 课数组与增强for批量计算多个练习时长。2026.09.07
  151. 第 6 课函数参数与表达式函数把重复的价格计算封装成函数。2026.09.07
  152. 第 6 课批量状态更新一次点击可靠地累计三次。2026.09.07
  153. 第 6 课TextInput受控输入让用户编辑并实时显示练习主题。2026.09.07
  154. 第 6 课vif条件渲染只在满足条件时创建提示内容。2026.09.07
  155. 第 6 课findViewById连接视图让 Activity 获取 XML 中的 TextView,并在代码中修改文字。2026.09.08
  156. 第 6 课挤出面生成相连几何从立方体顶面继续拉出一段相连网格。2026.09.08
  157. 第 6 课挤出多边形从可编辑立方体的一块面拉出新的几何结构。2026.09.08
  158. 第 6 课scheduleOnce延迟执行按键后延迟恢复节点状态,而不手动累计计时器。2026.09.08
  159. 第 6 课关键帧缓入缓出让上一课的缩放动画平缓起步和停止,减少机械感。2026.09.08
  160. 第 6 课连接片段添加补充画面在不切断主故事线的情况下,为一段讲解添加补充画面。2026.09.08
  161. 第 6 课Oscillate行为循环摆动让标题持续轻微旋转摆动,而不逐个制作重复关键帧。2026.09.08
  162. 第 6 课NSMutableArray可变数组在运行过程中向课程列表增加新项目。2026.09.08
  163. 第 6 课画笔编辑图层蒙版细化上一课的局部亮度范围,而不擦除照片像素。2026.09.08
  164. 第 6 课时间轴调整关键帧节奏只移动中间关键帧,让摆臂前半段更快、后半段更慢。2026.09.08
  165. 第 6 课字典与可选值按课程名称查找练习时长,并安全处理不存在的键。2026.09.08
  166. 第 6 课Observable状态共享让同一个页面中的多个子视图观察并修改共享学习进度。2026.09.08
  167. 第 6 课GetKeyDown触发一次动作按一次空格键只触发一次跳跃或提示动作。2026.09.08
  168. 第 6 课蓝图函数返回计算结果把练习分钟数转换成秒数,并在多个执行流中复用结果。2026.09.08
  169. 第 7 课列表点击与选中状态适用场景:设置选项、学习目录、行情列表选股、搜索结果点击2026.07.10
  170. 第 7 课用 StateFlow 管理共享状态页面通常既需要知道“当前值”,又需要持续接收后续变化,例如计数、登录状态和加载状态。StateFlow 同时具备当前值与数据流能力,适合由 KMP 共享层向 Android、iOS 暴露状态。2026.07.23
  171. 第 7 课Column纵向排列与间距纵向排列标题和说明。2026.09.07
  172. 第 7 课for循环遍历列表依次处理一组学习主题。2026.09.07
  173. 第 7 课while循环与可变状态在条件成立时重复推进计数。2026.09.07
  174. 第 7 课vector动态序列保存运行时可继续增加的一组练习时长。2026.09.08
  175. 第 7 课List动态集合保存运行时会继续增加的练习记录。2026.09.08
  176. 第 7 课map键值映射按课程名称快速查找对应的练习分钟数。2026.09.08
  177. 第 7 课select下拉选择让用户从有限选项中选择每日练习时长。2026.09.08
  178. 第 7 课ArrayList动态列表保存数量会变化的一组课程名称。2026.09.08
  179. 第 7 课只读List与map转换把一组练习分钟数转换成对应的秒数,而不修改原列表。2026.09.08
  180. 第 7 课受控输入框让 React 状态始终保存输入框当前显示的课程名称。2026.09.08
  181. 第 7 课条件渲染提示只在用户填写练习主题后显示确认提示。2026.09.08
  182. 第 7 课vfor列表渲染根据一组课程数据重复生成列表项。2026.09.08
  183. 第 7 课ViewBinding类型安全访问视图用生成的绑定类访问布局视图,减少手写 id 查找和类型转换。2026.09.09
  184. 第 7 课Inset Faces内插面在选中面内部创建一圈边界,为继续挤出或制作凹槽做准备。2026.09.09
  185. 第 7 课Bevel倒角边缘把挤出结构的尖锐边缘变成可控的小倒角。2026.09.09
  186. 第 7 课unschedule取消延迟回调在状态提前改变时取消尚未执行的延迟任务。2026.09.09
  187. 第 7 课Dynamic Zoom快速推拉用可视化起止框快速制作稳定的推近或拉远效果。2026.09.09
  188. 第 7 课Cross Dissolve转场在两个相邻镜头之间加入平滑的交叉叠化。2026.09.09
  189. 第 7 课Ramp行为制作透明度渐变让标题透明度从低到高逐渐变化,而不手动建立关键帧。2026.09.09
  190. 第 7 课NSDictionary键值查找按课程名称查找对应的练习时长。2026.09.09
  191. 第 7 课蒙版密度与羽化整体减弱蒙版遮挡强度并柔化边缘,而不重新涂画蒙版。2026.09.09
  192. 第 7 课复制关键帧复用动作复用一段已调整好的摆臂动作,快速形成第二个动作周期。2026.09.09
  193. 第 7 课Set去重与成员判断保存不重复的已完成课程名称,并快速判断某项是否存在。2026.09.09
  194. 第 7 课Environment注入共享模型把共享进度模型提供给较深层子视图,避免逐层传递参数。2026.09.09
  195. 第 7 课Coroutine等待后恢复状态按键触发动作后等待一段时间,再恢复可操作状态。2026.09.09
  196. 第 7 课纯函数表达只读计算把不修改对象状态的即时计算显示为没有执行引脚的蓝图节点。2026.09.09
  197. 第 8 课Navigation 基础页面跳转时效校验:20260915(HarmonyOS API 20 SDK、华为官方 Navigation 文档)2026.07.13
  198. 第 8 课Kotlin Serialization 共享序列化Android 和 iOS 调用同一个接口时,可以在共享层完成 JSON 解析,得到统一的 Kotlin 数据模型。这样两端不必各自维护一套字段映射规则。2026.07.24
  199. 第 8 课Stack叠放界面把状态标签叠放在课程卡片右上角。2026.09.08
  200. 第 8 课while循环与计数器在条件成立期间重复执行操作,例如完成固定次数的练习。2026.09.08
  201. 第 8 课loop与break返回值持续执行任务,直到满足条件时退出并得到一个结果。2026.09.08
  202. 第 8 课引用参数修改原值让函数直接修改调用方持有的变量,避免复制较大的对象。2026.09.09
  203. 第 8 课Dictionary键值查找通过课程名称直接查找对应的练习时长。2026.09.09
  204. 第 8 课struct组合字段把课程名称和练习时长组合成一个明确的数据类型。2026.09.09
  205. 第 8 课checkbox多项选择让用户从多个互不排斥的学习主题中选择任意多项。2026.09.09
  206. 第 8 课HashMap键值查找按课程名称快速保存和查找练习时长。2026.09.09
  207. 第 8 课filter筛选列表从一组数据中保留满足条件的元素,同时不修改原列表。2026.09.09
  208. 第 8 课map渲染列表与key根据课程数组生成一组结构一致的 React 元素。2026.09.09
  209. 第 8 课FlatList渲染长列表高效渲染可能变长的课程列表,而不是一次创建全部行。2026.09.09
  210. 第 8 课computed派生状态根据原始课程列表计算完成数量,避免维护重复状态。2026.09.09
  211. 第 8 课点击事件更新视图响应按钮点击并更新文本。2026.09.10
  212. 第 8 课向内挤出制作凹槽把中心面向内移动形成简单凹槽。2026.09.10
  213. 第 8 课ExtrudeInner建立内圈在多边形内部建立新边界,为凹槽做准备。2026.09.10
  214. 第 8 课unscheduleAllCallbacks生命周期清理组件退出使用时停止其延迟和重复任务。2026.09.10
  215. 第 8 课Inspector裁切画面隐藏片段边缘干扰并保留源素材。2026.09.10
  216. 第 8 课精确设置转场时长用明确数值统一转场节奏。2026.09.10
  217. 第 8 课Randomize制作透明度闪烁让透明度产生可重复的随机闪烁。2026.09.10
  218. 第 8 课安全读取字典值读取可能不存在的字典键并提供备用结果。2026.09.10
  219. 第 8 课复制图层蒙版把完成的遮罩复用到另一个调整图层。2026.09.10
  220. 第 8 课循环播放区间连续预览完整动作周期并检查首尾衔接。2026.09.10
  221. 第 8 课Dictionary键值映射按唯一键保存和查找课程属性。2026.09.10
  222. 第 8 课Environment读取共享模型让下层视图读取上层注入的共享模型。2026.09.10
  223. 第 8 课停止Coroutine状态提前变化时取消未完成的等待流程。2026.09.10
  224. 第 8 课宏复用执行流程封装包含多个执行出口的短流程。2026.09.10
  225. 第 9 课NavPathStack 参数传递时效校验:20260915(HarmonyOS API 20 SDK、华为官方 Navigation 文档)2026.07.14
  226. 第 9 课用 Ktor Client 发起共享网络请求Ktor Client 是支持 Kotlin Multiplatform 的异步 HTTP 客户端。请求与响应处理可以写在共享层,Android 和 iOS 只需要提供各自的平台网络引擎。2026.07.25
  227. 第 9 课ListView滚动列表在屏幕空间不足时纵向展示可滚动的课程列表。2026.09.09
  228. 第 9 课break与continue控制循环在循环中跳过无效数据,或找到目标后立即停止。2026.09.09
  229. 第 9 课match穷尽分支根据离散值选择结果,并让编译器检查所有情况是否已覆盖。2026.09.09
  230. 第 9 课const引用避免复制读取较大对象时避免复制并禁止意外修改。2026.09.10
  231. 第 9 课TryGetValue安全查找在键可能不存在时完成一次安全查找。2026.09.10
  232. 第 9 课方法绑定struct把与结构体相关的行为放在类型旁边。2026.09.10
  233. 第 9 课label关联表单控件让字段名称可点击,并帮助辅助技术识别控件。2026.09.10
  234. 第 9 课HashMap安全读取默认值读取可能不存在的键时提供默认值。2026.09.10
  235. 第 9 课map转换列表把列表每个元素转换成新形式。2026.09.10
  236. 第 9 课受控输入框让输入内容由 React 状态统一管理。2026.09.10
  237. 第 9 课FlatList空状态在列表没有数据时说明当前状态。2026.09.10
  238. 第 9 课watch响应副作用在响应式值变化后执行记录或请求。2026.09.10
  239. 第 9 课按钮切换运行状态用一次点击在“开始”和“暂停”之间切换。2026.09.11
  240. 第 9 课Bevel倒角边缘为凹槽外沿增加真实可见的窄倒角。2026.09.11
  241. 第 9 课Loop切线细分凹槽给凹槽侧壁增加一圈可继续调整的边。2026.09.11
  242. 第 9 课schedule重复任务让组件按固定间隔重复执行轻量任务。2026.09.11
  243. 第 9 课Inspector调整片段透明度让上层片段半透明,以便观察下层画面。2026.09.11
  244. 第 9 课添加Basic Title标题在时间线画面上叠加一行可编辑标题。2026.09.11
  245. 第 9 课关键帧精确控制透明度让透明度在指定时间点精确变化。2026.09.11
  246. 第 9 课NSMutableDictionary更新键值在运行时新增或更新课程属性。2026.09.11
  247. 第 9 课剪贴蒙版限制图层范围让上方调整或纹理只显示在下方图层的不透明区域。2026.09.11
  248. 第 9 课事件关键帧标记动作时点在动画中的准确时间点标记声音或逻辑事件。2026.09.11
  249. 第 9 课函数参数与返回值把可重复计算封装为带输入和输出的函数。2026.09.11
  250. 第 9 课Bindable编辑环境模型在视图内为环境中的可观察模型创建双向绑定。2026.09.11
  251. 第 9 课OnDisable清理Coroutine组件停用时自动取消仍在等待的协程。2026.09.11
  252. 第 9 课枚举与Switch分支用有名字的有限状态替代多个松散布尔值。2026.09.11
  253. 第 10 课NavPathStack 返回与路由栈时效校验:20260915(HarmonyOS API 20 SDK、华为官方 Navigation 文档)2026.07.15
  254. 第 10 课用 Repository 组织共享数据层页面如果直接调用 Ktor API,就会同时依赖网络地址、JSON 字段和业务规则。Repository 位于数据层,对上提供业务需要的数据,对下调用网络或数据库,使平台 UI 不必了解数据来源细节。2026.07.26
  255. 第 10 课ListView.builder按需构建高效显示数量较多的列表项。2026.09.10
  256. 第 10 课list列表基础按顺序保存一组可变数据。2026.09.10
  257. 第 10 课所有权与移动理解 Rust 如何安全管理堆内存。2026.09.10
  258. 第 10 课结构体组合数据把相关字段组合成一个明确的数据类型。2026.09.11
  259. 第 10 课class封装课程对象把课程数据和相关行为封装在同一类型中。2026.09.11
  260. 第 10 课指针接收者修改状态让方法直接修改原结构体字段。2026.09.11
  261. 第 10 课required必填校验在提交前阻止空的必填字段。2026.09.11
  262. 第 10 课定义类与创建对象用类型固定表达课程数据。2026.09.11
  263. 第 10 课associateBy建立索引把列表转换为可按唯一键查找的 Map。2026.09.11
  264. 第 10 课表单提交追加列表把受控输入内容追加到课程列表。2026.09.11
  265. 第 10 课FlatList项目分隔在课程项之间统一加入可复用间隔。2026.09.11
  266. 第 10 课watch清理副作用在下一次监听回调前取消旧任务。2026.09.11
  267. 第 10 课ViewModel保存界面状态在屏幕旋转等配置变更后保留页面的业务界面状态。2026.09.14
  268. 第 10 课Subdivision Surface修改器在保留基础网格的前提下获得更平滑的模型轮廓。2026.09.14
  269. 第 10 课Subdivision Surface平滑模型保持低模易编辑的同时预览更圆滑的最终表面。2026.09.14
  270. 第 10 课unschedule停止重复任务页面隐藏、组件禁用或目标完成时停止特定重复任务。2026.09.14
  271. 第 10 课Composite Mode融合片段把上层光效、纹理或图形与下层视频合成。2026.09.14
  272. 第 10 课调整标题画面位置把标题移到不遮挡主体、且符合版式的位置。2026.09.14
  273. 第 10 课Blend Mode融合图层把光效、纹理或颜色层与下方画面自然组合。2026.09.14
  274. 第 10 课自定义类封装课程把相关数据和行为封装成可复用对象。2026.09.14
  275. 第 10 课图层混合模式叠加纹理把纹理或光影融入底图,而不擦除原始像素。2026.09.14
  276. 第 10 课Draw Order调整遮挡关系在角色转身或手臂交叉时改变部件前后关系。2026.09.14
  277. 第 10 课结构体与成员方法表示轻量值数据,并把相关行为放在同一类型中。2026.09.14
  278. 第 10 课NavigationStack页面导航从课程列表进入详情页,并保留可返回的页面层级。2026.09.14
  279. 第 10 课Invoke延迟单次调用在几秒后触发一次简单方法,例如恢复按钮或隐藏提示。2026.09.14
  280. 第 10 课结构体组合蓝图数据把课程名、时长和完成状态作为一个整体传递。2026.09.14
  281. 第 11 课AppStorage 与 @StorageLink时效校验:20260915(HarmonyOS API 20 SDK、华为官方应用状态管理文档)2026.07.16
  282. 第 11 课用密封类型表达数据结果网络请求不仅会成功,也可能出现断网、HTTP 状态异常或数据解析失败。共享层可以用密封类型把结果完整交给调用方,让 Android 和 iOS 对所有情况进行明确处理,而不是用空对象或 UI 占位状态掩盖错误。2026.07.27
  283. 第 11 课ListView.separated列表间隔为按需构建的列表统一添加分隔线。2026.09.11
  284. 第 11 课tuple不可变序列保存一组创建后不应修改的固定数据。2026.09.11
  285. 第 11 课借用避免转移所有权让函数读取值而不取得所有权。2026.09.11
  286. 第 11 课引用参数修改对象让函数直接修改调用方对象,或无复制地只读访问对象。2026.09.14
  287. 第 11 课构造函数保证初始状态创建对象时强制提供必要数据,避免半初始化状态。2026.09.14
  288. 第 11 课接口描述所需行为让函数接收不同类型,只要求它们提供同一种行为。2026.09.14
  289. 第 11 课label关联表单控件扩大输入框的可点击区域,并让辅助技术读出字段名称。2026.09.14
  290. 第 11 课构造方法初始化对象创建对象时一次写入它必须具备的初始状态。2026.09.14
  291. 第 11 课data class表达数据简洁表示课程、用户或配置等以数据为主的对象。2026.09.14
  292. 第 11 课受控输入框让输入内容参与校验、提交或即时预览。2026.09.14
  293. 第 11 课FlatList稳定keyExtractor让列表在插入、删除和重排时正确复用每个项目。2026.09.14
  294. 第 11 课vmodel双向绑定输入把输入框内容同步到响应式变量,用于预览、校验和提交。2026.09.14
  295. 第 11 课SavedStateHandle恢复状态在进程重建后恢复轻量界面状态。2026.09.15
  296. 第 11 课ShadeAutoSmooth平滑着色让细分模型的曲面平滑,同时保留尖锐边界。2026.09.15
  297. 第 11 课细分曲面编辑笼架在平滑预览开启时继续调整低模形状。2026.09.15
  298. 第 11 课同一回调避免重复调度重复启动同一组件的计时任务时,避免叠加回调。2026.09.15
  299. 第 11 课AdjustmentClip统一效果把同一种视觉处理统一应用到多个下层片段。2026.09.15
  300. 第 11 课调整标题文字样式在保持标题位置不变时提高文字可读性。2026.09.15
  301. 第 11 课ShapeMask限制图层范围只显示纹理图层的局部区域,而不删除源像素。2026.09.15
  302. 第 11 课指定初始化方法创建 Lesson 时一次提供必需标题和时长。2026.09.15
  303. 第 11 课转换为智能对象反复缩放纹理或图形时保留原始内容。2026.09.15
  304. 第 11 课Skin切换附件集合让同一套骨骼动画复用不同外观。2026.09.15
  305. 第 11 课类的引用语义理解多个变量指向同一个课程对象时的状态变化。2026.09.15
  306. 第 11 课navigationDestination映射值路由按课程值统一映射详情页,避免在每个链接内重复目标视图。2026.09.15
  307. 第 11 课InvokeRepeating重复调用按固定间隔执行简单无参数方法,并在停用时取消。2026.09.15
  308. 第 11 课蓝图数组保存多条课程把多个 STLesson 值按顺序保存并遍历。2026.09.15
  309. 第 12 课@StorageProp 单向共享状态时效校验:20260915(HarmonyOS API 20 SDK、华为官方应用状态管理文档)2026.07.17
  310. 第 12 课用构造器注入共享依赖如果一个类在内部直接创建 Ktor Client 或 Repository,它会与具体实现紧密绑定,测试时也必须访问真实网络。构造器依赖注入让外部决定使用真实实现还是测试替身,Android 和 iOS 也能按各自入口组装同一套共享业务。2026.07.28
  311. 第 12 课ListView.builder按需构建展示较长或动态列表,避免一次创建所有子组件。2026.09.14
  312. 第 12 课dict字典键值映射用一个键快速找到对应值,例如按课程名记录完成次数。2026.09.14
  313. 第 12 课可变借用修改值让函数临时修改调用方的数据,同时不取得所有权。2026.09.14
  314. 第 12 课构造函数初始化结构体让 Lesson 创建时一定拥有有效标题和时长。2026.09.15
  315. 第 12 课init属性与对象初始化器创建对象时清晰赋值,并阻止创建后随意修改。2026.09.15
  316. 第 12 课类型断言读取具体值在确实需要具体类型能力时安全取回接口中的值。2026.09.15
  317. 第 12 课pattern约束输入格式让课程代码按指定格式通过浏览器原生校验。2026.09.15
  318. 第 12 课record表达不可变数据用紧凑语法表示以数据为主的课程值。2026.09.15
  319. 第 12 课sealedclass限制状态集合把课程加载状态限制为已知分支。2026.09.15
  320. 第 12 课不可变追加数组状态把受控输入提交为新课程,同时保持状态更新可预测。2026.09.15
  321. 第 12 课RefreshControl下拉刷新为课程 FlatList 增加明确的下拉刷新反馈。2026.09.15
  322. 第 12 课vmodel.trim清理输入在双向绑定时去掉输入首尾空白,减少提交前重复处理。2026.09.15
  323. 第 12 课StateFlow暴露可观察状态用 StateFlow 把可恢复状态作为只读流提供给界面。2026.09.16
  324. 第 12 课LoopCut添加支撑线在细分模型边缘附近增加支撑线以控制锐度。2026.09.16
  325. 第 12 课Loop支撑线控制锐度用环切线控制细分曲面的边缘锐度。2026.09.16
  326. 第 12 课计数验证调度生命周期记录 tick 次数,验证启用与禁用边界。2026.09.16
  327. 第 12 课AdjustmentClip关键帧让统一效果随时间逐渐增强。2026.09.16
  328. 第 12 课readonly属性暴露只读数据允许外部读取课程标题但不直接改写。2026.09.16
  329. 第 12 课组合多个Skin把基础外观与装备皮肤组合使用。2026.09.16
  330. 第 12 课结构体复制语义对照上一课的类,观察值类型赋值后的独立修改。2026.09.16
  331. 第 12 课NavigationPath编程式导航由状态主动把课程值推入导航栈。2026.09.16
  332. 第 12 课WaitForSeconds动态等待用协程按运行时参数等待不同时间。2026.09.16
  333. 第 12 课ForEachLoop遍历课程数组逐条读取 Lessons 数组并显示标题。2026.09.16
  334. 第 12 课标题淡入淡出让上一课的 Basic Title 平滑出现和消失。2026.09.17
  335. 第 12 课反转ShapeMask用反转遮罩显示形状外部区域。2026.09.17
  336. 第 12 课编辑智能对象内容在不破坏主文档图层的前提下修改智能对象源内容。2026.09.17
  337. 第 13 课PersistentStorage 状态持久化时效校验:20260915(HarmonyOS API 20 SDK、华为官方应用状态管理文档)2026.07.20
  338. 第 13 课手动组装共享依赖构造器注入解决了“类如何接收依赖”,但仍需要一个地方创建真实的 Ktor Client、数据源、Repository 和用例。这个集中组装对象图的位置通常称为 Composition Root(组合根)。2026.07.29
  339. 第 13 课ListTile构建标准列表行把按需构建的字符串列表变成结构清晰的标准列表行。2026.09.15
  340. 第 13 课set集合去重保存不重复的课程标签,并快速判断标签是否存在。2026.09.15
  341. 第 13 课切片借用连续数据读取 String 的一部分而不复制或取得所有权。2026.09.15
  342. 第 13 课const成员函数只读访问让只读 Lesson 对象也能安全读取时长。2026.09.16
  343. 第 13 课record表达值对象用 record 表达按内容比较的课程数据。2026.09.16
  344. 第 13 课typeswitch处理多种实现根据接口值的动态类型执行不同逻辑。2026.09.16
  345. 第 13 课setCustomValidity自定义提示为 pattern 失败提供更清楚的错误说明。2026.09.16
  346. 第 13 课record紧凑构造器校验在 record 创建时拒绝无效时长。2026.09.16
  347. 第 13 课when穷尽渲染状态把密封状态映射为界面文字。2026.09.16
  348. 第 13 课按id删除数组状态不可变地删除一条课程记录。2026.09.16
  349. 第 13 课刷新失败显示Alert在刷新异常时给出原生提示并复位状态。2026.09.16
  350. 第 13 课vmodel.number转换数值让时长输入直接同步为数值。2026.09.16
  351. 第 13 课repeatOnLifecycle按生命周期收集按可见生命周期安全收集 ViewModel 的 StateFlow。2026.09.17
  352. 第 13 课比较支撑线距离比较支撑线距离对细分边缘锐度的影响。2026.09.17
  353. 第 13 课成对支撑线控制凹槽用成对支撑线同时控制凹槽两侧的锐度。2026.09.17
  354. 第 13 课重新启用避免重复调度验证组件重新启用后不会重复注册同一回调。2026.09.17
  355. 第 13 课关键帧缓入缓出让 Adjustment Clip 的效果变化更自然。2026.09.17
  356. 第 13 课类扩展声明私有属性把仅供实现使用的可写属性放进类扩展。2026.09.17
  357. 第 13 课重置组合Skin附件切换组合皮肤后让插槽重新使用新皮肤附件。2026.09.17
  358. 第 13 课选择struct或class根据是否需要共享身份来选择值类型或引用类型。2026.09.17
  359. 第 13 课NavigationPath返回根页一次清空导航路径回到根页面。2026.09.17
  360. 第 13 课循环中动态等待在协程循环中按每轮状态改变等待时间。2026.09.17
  361. 第 13 课筛选已完成课程遍历课程数组时只处理完成状态为真的元素。2026.09.17
  362. 第 13 课调整标题持续时间让标题显示时长与旁白或画面节奏匹配。2026.09.18
  363. 第 13 课ShapeMask羽化边缘柔化蒙版边缘,让遮罩过渡不显生硬。2026.09.18
  364. 第 13 课独立智能对象副本让两个外观副本可以分别编辑,而不共享同一嵌入内容。2026.09.18
  365. 第 14 课@Provide 与 @Consume 组件树共享状态适用场景:祖先组件已经拿到状态,但中间会经过多层组件,不想一层层用 @Prop 往下透传2026.07.21
  366. 第 14 课构建共享状态持有者Android 和 iOS 页面通常都要处理加载中、成功和失败。如果两端各自编写一套状态转换,行为容易不一致。可以在 commonMain 中建立状态持有者,把数据层结果转换为统一状态,再让平台 UI 负责渲染。2026.07.30
  367. 第 14 课ListTile点击回调点击列表行时处理当前课程。2026.09.16
  368. 第 14 课集合交集比较计划找出两个学习计划共同包含的主题。2026.09.16
  369. 第 14 课数组切片借用范围从数组借用连续元素而不复制。2026.09.16
  370. 第 14 课值复制保持独立观察结构体值复制后两个对象可以独立修改。2026.09.17
  371. 第 14 课with表达式复制record用 with 基于现有 record 创建只修改部分属性的新值。2026.09.17
  372. 第 14 课接口值的nil判断区分 nil 接口与包含 nil 指针的接口值。2026.09.17
  373. 第 14 课checkValidity触发表单校验在提交前用浏览器约束校验判断表单是否有效。2026.09.17
  374. 第 14 课record自动访问器读取 record 组件自动生成的同名访问器。2026.09.17
  375. 第 14 课sealed状态携带数据让 sealed class 的不同状态携带各自需要的数据。2026.09.17
  376. 第 14 课按id更新数组状态不可变地更新一条课程记录。2026.09.17
  377. 第 14 课Alert提供重试动作在刷新失败提示中让用户直接重试。2026.09.17
  378. 第 14 课校验数值输入范围用计算属性从 number 输入派生范围校验结果。2026.09.17
  379. 第 14 课状态更新按钮文字把上一课收集到的 running 状态显示到按钮文字中。2026.09.18
  380. 第 14 课成对支撑线控制凹槽宽度用两组支撑线稳定控制细分后凹槽的宽度。2026.09.18
  381. 第 14 课检查四边面流向在继续细分前,确认凹槽附近的支撑线是否构成连续边环。2026.09.18
  382. 第 14 课property配置调度间隔让不同组件实例在 Inspector 中使用不同调度间隔。2026.09.18
  383. 第 14 课比较线性与缓动并排比较相同关键帧在两种插值下的运动节奏。2026.09.18
  384. 第 14 课只读方法返回摘要把对象内部属性组合成稳定的只读摘要。2026.09.18
  385. 第 14 课固定Skin搭配供预览在 Spine 编辑器中同时预览基础外观与帽子装备。2026.09.18
  386. 第 14 课枚举关联值表达状态用一个类型表达加载中、成功数量和失败消息。2026.09.18
  387. 第 14 课保存可编码导航路径在场景状态保存时序列化可编码的导航路径。2026.09.18
  388. 第 14 课保存Coroutine引用并停止在动态等待循环不再需要时停止指定协程。2026.09.18
  389. 第 14 课把筛选封装为函数复用“只保留已完成课程”的蓝图逻辑。2026.09.18
  390. 第 14 课吸附标题到旁白入点让已有标题从旁白开始处出现。2026.09.21
  391. 第 14 课调整ShapeMask控制点调整已羽化的矩形蒙版范围,使它贴合目标区域。2026.09.21
  392. 第 14 课对比关联与独立智能对象副本辨认修改原对象时哪份副本会同步。2026.09.21
  393. 第 15 课@Watch 状态监听与派生处理适用场景:某个状态变化后,需要同步更新提示文案、派生字段或执行轻量联动逻辑,但 UI 仍然由状态结果驱动2026.07.22
  394. 第 15 课测试共享状态持有者共享状态持有者决定 Android 和 iOS 最终看到的页面状态。把测试写在 commonTest,可以用一套用例验证两端共同依赖的状态转换,不需要启动模拟器或访问真实服务器。2026.07.31
  395. 第 15 课Navigator.push进入详情页点击课程行后把详情页压入导航栈。2026.09.17
  396. 第 15 课集合并集合并计划合并两个学习计划中的全部不重复主题。2026.09.17
  397. 第 15 课切片参数复用借用让函数接收任意连续整数切片而不取得所有权。2026.09.17
  398. 第 15 课移动语义转移资源把不再需要的字符串资源转移给新对象,避免一次深复制。2026.09.18
  399. 第 15 课解构record把位置 record 的字段一次拆成局部变量。2026.09.18
  400. 第 15 课error接口返回失败让函数把可预期的失败交给调用方处理。2026.09.18
  401. 第 15 课input时清除自定义消息用户重新编辑后立即清除上一次业务校验消息。2026.09.18
  402. 第 15 课record值相等按组件值比较两条课程记录,而不是比较对象身份。2026.09.18
  403. 第 15 课读取sealed分支数据在穷尽 when 中读取 Ready 状态携带的数量。2026.09.18
  404. 第 15 课提取列表项组件把单条课程的显示和更新按钮拆成可复用组件。2026.09.18
  405. 第 15 课重试期间禁用重复触发刷新重试尚未结束时阻止用户重复启动同一任务。2026.09.18
  406. 第 15 课阻止无效提交范围校验失败时不把课程加入列表。2026.09.18
  407. 第 15 课按钮调用ViewModel切换状态点击按钮时更新已有 StateFlow 的单一事实源。2026.09.21
  408. 第 15 课检查四边面边流在细分前确认凹槽周围可连续环切。2026.09.21
  409. 第 15 课Slide调整异常边环局部移动拓扑连续但与相邻边线间距不均的凹槽支撑线。2026.09.21
  410. 第 15 课限制调度间隔下限避免 Inspector 中的零或负间隔进入 schedule。2026.09.21
  411. 第 15 课调整缓动手柄控制节奏细调上一课对比出的缓动变化速度。2026.09.21
  412. 第 15 课只读属性提供摘要让调用方用属性语法读取上一课的摘要。2026.09.21
  413. 第 15 课调整固定Skin覆盖顺序当多个固定 Skin 向同一 skin placeholder 提供附件时,设定视口中应显示哪一个。2026.09.21
  414. 第 15 课穷尽switch读取加载状态让每种 LoadState 都有可见描述。2026.09.21
  415. 第 15 课SceneStorage保存导航数据为同一场景保存上一课编码的导航数据。2026.09.21
  416. 第 15 课防止重复启动协程避免连续点击产生多个等待循环。2026.09.21
  417. 第 15 课函数参数筛选最短时长复用已完成课程筛选并增加一个阈值。2026.09.21
  418. 第 15 课复制第二条同样式标题为旁白的第二个关键字准备另一条保留淡入和时长的标题。2026.09.22
  419. 第 15 课在检视器单独调整矩形蒙版宽度在保留第 14 课矩形蒙版高度的同时,微调其覆盖宽度。2026.09.22
  420. 第 15 课将独立副本转换为链接智能对象把第 14 课独立编辑的纹理副本保存成可由其他文档共享的外部文件。2026.09.22
  421. 第 16 课组件生命周期与资源清理适用场景:组件显示时启动定时任务、订阅或加载数据,并在组件离开时及时停止任务、解除订阅2026.07.24
  422. 第 16 课定义共享存储接口Android 与 iOS 都能保存少量偏好数据,但它们使用不同平台 API。共享业务不应直接依赖任一平台;先定义统一接口,平台源码集再提供具体实现。2026.08.01
  423. 第 16 课Navigator.pop返回结果从详情页返回时把用户选择传回列表页。2026.09.18
  424. 第 16 课集合对称差找出只出现在其中一个学习计划里的主题。2026.09.18
  425. 第 16 课返回切片最大值从借用的整数切片读取最大值,不取得集合所有权。2026.09.18
  426. 第 16 课移动赋值复用字符串把已有字符串资源转交给另一个已存在变量。2026.09.21
  427. 第 16 课位置模式匹配record在 switch 中同时匹配课程标题和时长。2026.09.21
  428. 第 16 课fmt.Errorf补充错误上下文让调用者知道哪个时长值失败。2026.09.21
  429. 第 16 课提交时报告输入错误在表单提交前让浏览器显示校验提示。2026.09.21
  430. 第 16 课record用作Map键按课程值检索对应备注。2026.09.21
  431. 第 16 课sealed状态加入错误分支让加载失败也有明确文字。2026.09.21
  432. 第 16 课提取组件后放置key提取列表项组件后,仍让 React 在数组生成处识别每一项。2026.09.21
  433. 第 16 课显示最后刷新时间让用户辨认最近一次成功刷新。2026.09.21
  434. 第 16 课关联输入框与错误提示让辅助技术知道时长输入是否无效,以及对应提示位于哪里。2026.09.21
  435. 第 16 课原子切换 ViewModel 状态快速连续触发切换时,让每次更新都基于状态流的当前值。2026.09.22
  436. 第 16 课把相邻三角面恢复为四边面修整第 15 课发现的、由一对相邻三角面造成的环切中断。2026.09.22
  437. 第 16 课Slide 复制一条支撑边环在凹槽另一侧补一条与原支撑线平行的边环,不重新绘制切线。2026.09.22
  438. 第 16 课在 Inspector 标明调度间隔单位让策划知道上一课的 interval 输入单位是秒,避免误填毫秒。2026.09.22
  439. 第 16 课把缓动调整片段存入媒体池把上一课调好的缓动片段留作素材,稍后应用到第二个镜头。2026.09.22
  440. 第 16 课比较属性点语法与 getter 消息阅读调用方代码时判断两种摘要读取方式是否一致。2026.09.22
  441. 第 16 课辨认未固定活动 Skin 的覆盖顺序解释已排序的 pinned skins 外观为何会被当前选中的 Skin 覆盖。2026.09.22
  442. 第 16 课用 if case 读取失败消息只有加载失败时记录错误消息,不必为其他状态写完整 switch。2026.09.22
  443. 第 16 课场景出现时恢复导航路径同一场景重建后,把上一课保存的页面栈恢复出来。2026.09.22
  444. 第 16 课将练习协程设为有限次数让上一课防重入的练习协程在三次等待后自行结束,为下一课清空引用创造确定的结束点。2026.09.22
  445. 第 16 课读取筛选结果数组长度快速核对第 15 课筛选函数实际返回了多少门课。2026.09.22
  446. 第 16 课在旁白片段添加标记在旁白中的第二个关键字处记录后续标题的对齐点。2026.09.23
  447. 第 16 课为矩形蒙版尺寸设置关键帧让上一课已贴合目标的矩形蒙版随画面逐渐变宽。2026.09.23
  448. 第 16 课置入外部链接智能对象让多个设计文档引用同一份外部纹理源文件。2026.09.23
  449. 第 17 课异步数据加载与页面状态适用场景:页面进入后请求网络数据、读取数据库或执行其他需要等待的任务2026.07.27
  450. 第 17 课实现 Android 偏好存储上一课只定义了 PreferenceStorage 接口。Android 端需要把这个接口映射到真实的平台存储 API,才能让共享 LanguageRepository 保存和读取偏好。2026.08.02
  451. 第 17 课返回后刷新列表行详情页保存成功后只更新对应列表行。2026.09.21
  452. 第 17 课子集判断学习计划确认一组学习项是否全部包含在另一组计划中。2026.09.21
  453. 第 17 课空切片的最大值提示为空列表提供明确提示。2026.09.21
  454. 第 17 课只移动 Lesson 的标题成员课程对象需要保留自己的时长,只接收另一对象的标题时,避免误移动整个对象。2026.09.22
  455. 第 17 课位置模式忽略标题只按时长分类课程,不限制标题。2026.09.22
  456. 第 17 课定义可复用的校验错误让多次校验失败共享同一个错误身份,便于后续识别。2026.09.22
  457. 第 17 课为时长字段指定提交名称让通过校验的时长值作为表单数据提交。2026.09.22
  458. 第 17 课检查 record 键是否存在区分课程键不存在与键存在但备注值为 null。2026.09.22
  459. 第 17 课空白错误消息使用默认文案错误状态没有可读消息时,仍向用户展示明确文案。2026.09.22
  460. 第 17 课区分 key 与课程 ID 属性列表项组件既要让 React 识别身份,也要在点击时知道课程 ID。2026.09.22
  461. 第 17 课为重试按钮设置无障碍名称让屏幕阅读器明确说明按钮会重新刷新课程列表。2026.09.22
  462. 第 17 课无效提交立即显示字段错误用户未离开输入框就直接提交时,也立即看见已有范围错误。2026.09.22
  463. 第 17 课旋转屏幕后保持 ViewModel 状态验证上一课点击按钮改变的 running 状态在屏幕旋转后仍被界面正确显示。2026.09.23
  464. 第 17 课在连通四边面区域插入支撑边环在第 16 课修整后的凹槽边界插入一条连续支撑边环。2026.09.23
  465. 第 17 课对比支撑线调整前后轮廓检查上一课复制并调整的凹槽支撑线是否真的改善细分轮廓。2026.09.23
  466. 第 17 课Inspector 标注调度间隔范围让策划在 Inspector 中直接看到并调整建议的调度间隔范围。2026.09.23
  467. 第 17 课把媒体池缓动片段用于第二镜头为第二个镜头沿用已确认的效果和缓动节奏。2026.09.23
  468. 第 17 课用协议声明摘要读取契约让其他课程展示对象也能承诺提供相同的摘要文字。2026.09.23
  469. 第 17 课导出可见 Skin 预览图把上一课确定的 base、hat、glasses 搭配交给同伴预览。2026.09.23
  470. 第 17 课为 if case 附加数量条件只对已有课程数量大于零的成功状态显示列表入口。2026.09.23
  471. 第 17 课导航路径变化时自动保存用户进入或返回课程页时,及时更新场景保存的导航数据。2026.09.23
  472. 第 17 课协程自然结束后清空引用有限次数的练习协程自行结束后,允许下一次点击重新启动。2026.09.23
  473. 第 17 课比较阈值筛选结果数量比较同一批已完成课程在不同最短时长条件下的数量。2026.09.23
  474. 第 17 课将第二条标题吸附到旁白标记让第二条标题精确从旁白第二个关键字开始。2026.09.24
  475. 第 17 课为矩形蒙版高度设置关键帧让第 16 课逐渐变宽的蒙版同时逐渐变高,贴合移动主体。2026.09.24
  476. 第 17 课更新已修改的链接智能对象外部纹理源修改后,让第 16 课置入的链接对象显示最新内容。2026.09.24
  477. 第 18 课数据服务与页面职责分离适用场景:页面需要请求网络数据、读取数据库,且希望请求实现可以复用和独立测试2026.07.28
  478. 第 18 课实现 iOS 偏好存储iOS 端需要为同一个 PreferenceStorage 接口提供实现。共享 LanguageRepository 因此可以保持不变,同时在 iPhone 和 iOS 模拟器上使用系统偏好存储。2026.08.03
  479. 第 18 课State 方法中检查 mounted把详情页返回处理放进列表页 State 方法后,避免页面销毁时调用 setState。2026.09.22
  480. 第 18 课集合相等判断学习计划在确认两组学习主题的包含关系后,判断它们是否恰好相同。2026.09.22
  481. 第 18 课查找切片中的目标值从借用的分数切片中找到第一个目标值,同时保留“找不到”的情况。2026.09.22
  482. 第 18 课移动含字符串成员的 Lesson把已有课程对象中的字符串成员转交给另一个课程对象。2026.09.23
  483. 第 18 课属性模式匹配 record按课程对象的具名属性判断时长,避免依赖组件声明顺序。2026.09.23
  484. 第 18 课使用 %w 包装底层错误给校验失败增加课程时长上下文,同时让调用方仍能识别原始错误。2026.09.23
  485. 第 18 课关联输入框与校验说明让浏览器约束校验中的时长输入框与页面上的范围说明形成可识别的关联。2026.09.23
  486. 第 18 课替换 Map 中的 record 键课程时长修正后,让备注改为通过新课程值查找。2026.09.23
  487. 第 18 课用 is 判断可重试错误状态在上一课显示错误消息后,只为错误状态提供重试入口。2026.09.23
  488. 第 18 课稳定 key 保留列表项身份重新排列课程列表时,让每条课程的输入框继续对应原课程。2026.09.23
  489. 第 18 课刷新失败显示内联提示刷新失败后,列表旁保留可见提示,同时继续显示上次成功刷新时间。2026.09.23
  490. 第 18 课无效提交时聚焦时长输入时长超出范围且用户点击提交时,把焦点移回出错字段。2026.09.23
  491. 第 18 课让运行状态可在系统进程终止后恢复在旋转保留之外,为系统终止进程后的轻量状态恢复提供同一个事实源。2026.09.24
  492. 第 18 课沿相邻面滑动已存在的支撑边环微调第 17 课已插入的支撑线距离,不增加新的边环。2026.09.24
  493. 第 18 课调整视口细分级别复核轮廓在不修改控制笼拓扑的前提下,检查第 17 课凹槽轮廓的平滑程度。2026.09.24
  494. 第 18 课为调度间隔添加悬停说明解释为何 Inspector 中的调度间隔下限是 0.1 秒。2026.09.24
  495. 第 18 课成组移动第二镜头关键帧第二个镜头的动作起点不同,让复用的缓动节奏按新镜头时机出现。2026.09.24
  496. 第 18 课让 Lesson 采纳摘要协议让调用方只依赖摘要契约,而不必知道对象的具体类。2026.09.24
  497. 第 18 课导出前预览 Skin 图像边界检查上一课的 Skin 预览 PNG 是否会裁掉帽子或眼镜。2026.09.24
  498. 第 18 课用 guard case 提前排除非成功状态只有成功加载时才继续计算课程数量。2026.09.24
  499. 第 18 课损坏的导航数据回退到根页场景存储中的路径数据无法解码时,避免每次显示页面都重复尝试同一损坏值。2026.09.24
  500. 第 18 课暂停游戏时按真实时间等待暂停游戏时间后,仍让训练提示按现实时间继续计时。2026.09.24
  501. 第 18 课把筛选数量转换为文本把上一课算出的课程数量交给文本显示,不在筛选函数中拼字符串。2026.09.24
  502. 第 18 课逐帧微调旁白标记位置第二条标题对齐后,发现旁白关键字起点比标记晚了一帧。2026.09.28
  503. 第 18 课在关键帧编辑器比较蒙版宽高曲线辨认同一矩形蒙版的 Width 与 Height 动画是否在预期时间发生。2026.09.28
  504. 第 18 课重新链接移动后的智能对象源文件外部纹理文件搬到新文件夹后,恢复第 17 课的链接智能对象。2026.09.28
  505. 第 19 课接口抽象与可替换数据服务适用场景:同一页面需要切换真实服务、测试服务或不同数据源,同时保持页面代码不变2026.07.29
  506. 第 19 课认识 Compose Multiplatform 共享 UIKMP 不仅可以共享数据层,也可以使用 Compose Multiplatform 共享 Android、iOS、桌面和 Web 的 UI 代码。共享组件接收数据并发送用户事件,平台入口负责把它显示到各自窗口中。2026.08.04
  507. 第 19 课提取列表行更新方法让详情页返回后的点击处理器只负责判断结果,由独立方法修改原列表行。2026.09.23
  508. 第 19 课集合差集列出待补主题在子集判断失败后,列出学习计划中尚未覆盖的主题。2026.09.23
  509. 第 19 课查找切片中的元素位置在借用的分数切片中找出第一个目标分数的位置。2026.09.23
  510. 第 19 课比较 Lesson 的拷贝与移动目标需要决定后续是否还要使用源课程时,通过同一对象对照拷贝与移动的结果。2026.09.24
  511. 第 19 课同时匹配 record 两个属性只把指定标题且时长足够的课程标记为重点。2026.09.24
  512. 第 19 课按错误身份显示校验提示只对时长校验错误显示有针对性的输入提示。2026.09.24
  513. 第 19 课提交失败时标记输入错误校验失败后让辅助技术知道时长字段处于错误状态。2026.09.24
  514. 第 19 课核对替换后的 Map 大小替换课程键后确认备注没有被复制成两条。2026.09.24
  515. 第 19 课智能转换读取错误消息仅对有具体错误消息的失败状态提供重试入口。2026.09.24
  516. 第 19 课受控编辑列表项标题编辑课程标题后即使反转列表,输入值仍与对应课程数据一致。2026.09.24
  517. 第 19 课标识内联刷新失败提示让辅助技术辨认刷新失败后新增的内联文字是警告信息。2026.09.24
  518. 第 19 课提交成功后清空时长输入保存一条练习时长后清空字段,准备输入下一条。2026.09.24
  519. 第 19 课用 am kill 验证系统进程恢复可重复验证第 18 课的 SavedStateHandle 恢复,不把用户主动强停误当成系统回收。2026.09.28
  520. 第 19 课用 Even 模式对齐支撑边距离比较凹槽两侧支撑边环到相邻边的距离,减少不均匀的锐化。2026.09.28
  521. 第 19 课区分渲染与视口细分级别保持凹槽模型的视口响应,同时提高最终渲染的平滑度。2026.09.28
  522. 第 19 课为两个组件实例分别设置调度间隔两个练习节点共享同一脚本,但需要不同的 tick 频率。2026.09.28
  523. 第 19 课只调整第二镜头动画终点值第二镜头动作时机已对齐,但想让效果终点比第一个镜头更明显。2026.09.28
  524. 第 19 课让第二个对象实现摘要协议课程卡片和上一课的 Lesson 使用同一摘要读取接口。2026.09.28
  525. 第 19 课统一 Skin 预览图的导出比例让第 17 课的两种 Skin 搭配按同一尺寸比例交付,便于并排比较。2026.09.28
  526. 第 19 课把可用课程数量转换成提示仅在加载成功且课程数量为正数时,生成界面提示文字。2026.09.28
  527. 第 19 课记录导航恢复失败日志场景保存的导航路径无法解码时,留下可诊断记录,同时继续安全回到根页。2026.09.28
  528. 第 19 课按暂停需求选择协程时钟同一个练习流程可用于游戏内倒计时或暂停菜单提示。2026.09.28
  529. 第 19 课在 UMG 文字中显示筛选数量让第 18 课筛选出的课程数量显示在正式游戏界面,而不只在调试文字中出现。2026.09.28
  530. 第 19 课移动旁白片段检查标题连接关系观察整体移动旁白片段时标题的连接关系。2026.09.29
  531. 第 19 课单独调整宽度曲线插值只调整 Width 曲线插值并保留 Height 对照。2026.09.29
  532. 第 19 课核对多个链接智能对象的源文件检查多份链接对象是否指向预期源文件。2026.09.29
  533. 第 20 课Hypium 数据服务单元测试适用场景:数据服务已经从页面中拆出,需要在不启动 UI 的情况下验证服务契约2026.07.30
  534. 第 20 课把 StateFlow 接入共享 UI上一课的共享组件只能显示外部传入的静态参数。本课把 UserStore.state 接入 Compose,使 Repository 数据变化后,Android 和 iOS 的共享界面都能自动重新渲染。2026.08.05
  535. 第 20 课详情页返回编辑后的标题详情页修改课程名称后把新标题传回原列表行。2026.09.24
  536. 第 20 课检查待补主题不相交核对待补主题是否确实没有出现在已完成的学习计划里。2026.09.24
  537. 第 20 课查找最后一次匹配位置分数切片里同一分数出现多次时,定位最后一次出现的位置。2026.09.24
  538. 第 20 课移动课程对象进入列表把上一课得到的目标课程放入课程列表,不再依赖该目标对象的原标题。2026.09.28
  539. 第 20 课匹配两种重点课程标题把两种指定标题且时长足够的课程归为同一重点类别。2026.09.28
  540. 第 20 课区分两类时长校验错误分别提示“非正数”和“超过上限”的练习时长。2026.09.28
  541. 第 20 课关联输入错误详情无效提交时,把时长输入框与页面内的具体错误文字关联。2026.09.28
  542. 第 20 课遍历 Map 中的课程键检查替换课程键后,当前 Map 实际保存了哪些课程。2026.09.28
  543. 第 20 课组合状态文案与重试提示在同一处展示状态文字,并只为有具体错误消息的失败状态显示重试提示。2026.09.28
  544. 第 20 课提交前检查课程标题非空允许用户暂时清空输入框,但不把空白标题写入课程列表。2026.09.28
  545. 第 20 课在 Android 上温和播报刷新结果刷新失败文字变化时,提示 TalkBack 用户,但不强行打断正在朗读的内容。2026.09.28
  546. 第 20 课显示已提交时长列表成功保存练习时长后,立即在表单下方看到已有记录。2026.09.28
  547. 第 20 课限制保存状态为轻量数据只保存课程 ID,不把完整课程对象放入保存状态。2026.09.29
  548. 第 20 课固定细分级别检查凹槽轮廓在固定细分级别下检查最终凹槽轮廓。2026.09.29
  549. 第 20 课比较渲染细分级别的细节与耗时保持视口设置不变,对比两个渲染细分级别。2026.09.29
  550. 第 20 课对比两个实例的运行计数让两个组件实例分别累计并输出运行次数。2026.09.29
  551. 第 20 课比较两镜头动画起止效果分别复核两个镜头的起点与终点效果。2026.09.29
  552. 第 20 课用协议类型统一展示摘要让同一函数接收两个协议采纳者。2026.09.29
  553. 第 20 课固定Skin预览图文件前缀在相同比例之外再固定输出文件前缀。2026.09.29
  554. 第 20 课为空数量提供独立文案为上一课的可选提示提供空值文案。2026.09.29
  555. 第 20 课统计导航恢复成败次数只统计恢复结果次数,不记录敏感路径内容。2026.09.29
  556. 第 20 课为暂停菜单提供真实时间入口把上一课的时钟选择接入暂停菜单。2026.09.29
  557. 第 20 课筛选变化时复用同一TextBlock更新同一个 UMG 文本控件而不重复创建 Widget。2026.09.29
  558. 第 20 课调整标题的连接点让标题在移动旁白片段时仍连接到正确的时间位置。2026.09.30
  559. 第 20 课单独调整高度曲线插值在保留宽度曲线结果的前提下调整蒙版高度节奏。2026.09.30
  560. 第 21 课Hypium 异常路径测试适用场景:数据服务可能请求失败,需要确认失败会按接口语义向调用方抛出,而不是被服务或 UI 静默吞掉2026.07.31
  561. 第 21 课连接 Android 与 iOS 的 Compose 入口共享 @Composable 函数不会自己创建 Android 窗口或 iOS 控制器。每个平台仍需要一个很薄的原生入口,把共同的 App() 放进平台宿主中。2026.08.06
  562. 第 21 课从详情页输入并提交新标题在详情页输入课程的新标题,按键盘“完成”后返回列表页。2026.09.28
  563. 第 21 课排序展示待补主题把集合中的待补主题按固定顺序展示,避免每次输出顺序不同。2026.09.28
  564. 第 21 课安全读取匹配位置的元素用上节课找到的索引读取分数,同时处理索引越界。2026.09.28
  565. 第 21 课遍历课程列表显示标题用范围 for 遍历已移动进入 vector 的课程。2026.09.29
  566. 第 21 课筛选重点课程列表把上一课的属性模式用于列表筛选。2026.09.29
  567. 第 21 课封装时长错误提示把两种错误身份集中转换为提示。2026.09.29
  568. 第 21 课有效提交后追加练习记录校验通过后把本次练习追加到页面列表。2026.09.29
  569. 第 21 课按课程键读取备注遍历键时用 Map.get 读取对应备注。2026.09.29
  570. 第 21 课把状态结果交给界面参数把既有显示文案和重试布尔值分别传给界面函数。2026.09.29
  571. 第 21 课为空白提交显示明确反馈为空白标题提交增加可感知反馈。2026.09.29
  572. 第 21 课记录双平台朗读验证结果把 Android 与 iOS 的无障碍验证分开记录,不伪造结果。2026.09.29
  573. 第 21 课为练习记录添加稳定标识为上一课列表中的每条记录绑定稳定 ID。2026.09.29
  574. 第 21 课从SavedStateHandle创建状态流以保存的课程 ID 作为可观察状态,同时提供首次默认值。2026.09.30
  575. 第 21 课单独设置渲染细分级别保持视口检查流畅,同时为最终渲染使用独立细分级别。2026.09.30
  576. 第 21 课固定渲染细分级别复测耗时在同一渲染级别下重复测试,排除参数变化造成的耗时差异。2026.09.30
  577. 第 21 课停止单个实例的计数回调只停止当前组件实例的计数,不影响另一个节点上的同类实例。2026.09.30
  578. 第 21 课循环播放两镜头过渡点重复观察两镜头交界处,确认动画起止效果衔接自然。2026.09.30
  579. 第 21 课用协议类型数组统一保存对象把不同实现类的摘要对象放入同一个有类型约束的数组。2026.09.30
  580. 第 21 课为Skin预览图加入递增编号批量导出多组 Skin 预览时避免相同前缀互相覆盖。2026.09.30
  581. 第 21 课用空合并运算符合并提示为上一课的可选课程提示提供紧凑的默认文案。2026.09.30
  582. 第 21 课恢复后读取导航层级数统计恢复后的导航层级,不记录具体敏感路径内容。2026.09.30
  583. 第 21 课用timeScale暂停并恢复游戏把上一课的暂停菜单入口连接到全局游戏时间缩放。2026.09.30
  584. 第 21 课为空筛选结果显示替代文字当筛选数量为零时复用同一个文本控件显示“暂无课程”。2026.09.30
  585. 第 22 课Hypium 测试生命周期钩子适用场景:一组测试需要重复创建服务对象,或每个用例结束后都要恢复测试环境2026.08.03
  586. 第 22 课Compose 共享资源与本地化把文案直接写在 Kotlin 代码里,会让翻译、地区适配和统一修改变得困难。Compose Multiplatform 可以在 commonMain 维护共享字符串资源,并根据设备语言自动选择对应翻译。2026.08.07
  587. 第 22 课拒绝空白标题提交在详情页返回标题前检查空白输入。2026.09.29
  588. 第 22 课逐条输出学习清单用 for 把排序后的待补主题逐条打印。2026.09.29
  589. 第 22 课组合匹配位置与读取值用 Option::zip 组合位置和值。2026.09.29
  590. 第 22 课统计课程列表数量遍历显示标题后核对列表实际保存的课程数。2026.09.30
  591. 第 22 课把筛选结果物化为列表固定当前重点课程筛选结果,供后续多次读取。2026.09.30
  592. 第 22 课完整映射两类时长错误让上一课的提示函数分别覆盖过短、过长与未知错误。2026.09.30
  593. 第 22 课追加记录后重置表单有效提交并追加记录后清空输入,准备下一次录入。2026.09.30
  594. 第 22 课用entrySet同时读取课程与备注遍历时一次取得课程键和备注值,避免再次按键查询。2026.09.30
  595. 第 22 课定义接收派生状态的界面函数为上一课的命名参数调用补上可执行的函数契约。2026.09.30
  596. 第 22 课把标题错误关联到输入框让辅助技术读取空白提交产生的错误说明。2026.09.30
  597. 第 22 课为测试矩阵记录辅助技术版本让双平台朗读结果能追溯到具体 VoiceOver 或 TalkBack 环境。2026.09.30
  598. 第 22 课反转记录时保持行身份验证列表重排后每条练习记录仍由业务 ID 标识。2026.09.30
  599. 第 23 课Hypium 套件级生命周期钩子适用场景:一组测试需要复用创建成本较高、且测试期间保持只读的资源2026.08.04
  600. 第 23 课Compose 共享图片资源Logo、插图和图标等跨平台一致的图片只维护一份,Android 与 iOS 界面都通过生成的 Res 访问它们。2026.08.08
  601. 第 23 课为空白标题显示内联错误拒绝空白提交时在输入框下方解释原因。2026.09.30
  602. 第 23 课给学习清单添加序号在逐条输出待补主题时同时显示从 1 开始的序号。2026.09.30
  603. 第 23 课转换组合后的匹配结果把上一课组合出的索引和值转换成可显示文本。2026.09.30
  604. 第 24 课Hypium 数据表驱动测试适用场景:同一个函数需要验证多组边界值,而每组测试的执行步骤和断言结构相同2026.08.05
  605. 第 24 课Compose 共享主题颜色、排版和形状集中定义后,共享组件不必到处写死样式;切换亮色或深色模式时也能整体保持一致。2026.08.09
  606. 第 25 课Hypium 测试替身与依赖注入适用场景:被测对象依赖网络、数据库等外部服务,希望单元测试快速、稳定且不访问真实环境2026.08.06
  607. 第 25 课Compose 共享 UI 测试同一份测试可以确认共享 Composable 是否正确显示状态、响应点击,减少 Android 与 iOS 界面行为不一致的风险。2026.08.10
  608. 第 26 课Hypium 交互验证与调用次数适用场景:业务结果相同,但仍需确认保存、上报或通知等依赖是否被调用了正确次数2026.08.07
  609. 第 26 课Compose 共享页面导航Android 与 iOS 可以复用同一套路由、返回栈和页面跳转逻辑,不必分别维护首页到详情页的导航流程。2026.08.11
  610. 第 27 课Hypium 异步交互顺序验证适用场景:业务要求前一个异步操作成功完成后,才能执行通知、跳转或后续提交2026.08.10
  611. 第 27 课Compose 类型安全路由传参从列表页打开详情页时,通常需要告诉详情页“打开哪一条数据”。把 id 放进路由后,Android 与 iOS 共用同一种参数格式,编译器也能检查参数类型。2026.08.12
  612. 第 28 课Hypium 异步失败交互验证适用场景:保存、提交或支付失败时,后续成功通知、跳转等操作必须停止2026.08.11
  613. 第 28 课Compose 导航返回栈普通详情页需要返回上一页,而登录、支付完成等一次性流程结束后,不应该再返回旧页面。正确整理返回栈可以避免“登录成功后按返回键又看到登录页”。2026.08.13
  614. 第 29 课Hypium 成功与失败契约测试适用场景:同一个异步业务方法既要验证成功后的交互,也要验证失败后的中断行为2026.08.12
  615. 第 29 课Compose 共享导航测试导航图写对并不代表按钮一定连到了正确页面。共享导航测试可以确认 Android 与 iOS 共用的 NavHost 在用户点击后确实显示目标页面。2026.08.14
  616. 第 30 课Hypium 用例命名与 AAA 结构适用场景:成功、失败用例逐渐增多,需要从测试名快速看懂条件、行为和期望,并在失败时定位阶段2026.08.13
  617. 第 30 课Compose 共享 ViewModel页面重组时不重复创建业务状态,并让 Android 与 iOS 共用同一份状态更新逻辑。2026.08.15
  618. 第 31 课Hypium 单一行为断言原则适用场景:一个测试同时检查异常、调用次数和多个状态,失败时难以判断是哪条业务契约被破坏2026.08.14
  619. 第 31 课StateFlow 生命周期感知收集页面进入活跃状态时开始收集数据,页面进入后台或离开活跃状态时停止收集,避免不可见界面继续做无意义的 UI 更新。2026.08.16
  620. 第 32 课Hypium 测试数据工厂适用场景:多个用例反复创建相同的 Fake、Spy 和被测对象,准备代码过多,真正的测试差异不突出2026.08.17
  621. 第 32 课ViewModel 读取路由参数详情页 ViewModel 可以直接获得 itemId 并向 Repository 加载数据,不需要让 Composable 解析参数后再层层传递。2026.08.17
  622. 第 33 课Hypium 参数化测试工厂适用场景:多组输入遵循同一条业务规则,但希望每组数据都有独立用例名,失败时可直接定位具体边界场景2026.08.18
  623. 第 33 课ViewModel 按 ID 加载数据详情页只需要接收一个 itemId,真正的数据读取由 ViewModel 和 Repository 完成;Android 与 iOS UI 只渲染加载、成功或失败状态。2026.08.18
  624. 第 34 课Hypium 异步参数化测试适用场景:同一个异步服务需要覆盖多组成功与失败输入,且希望失败报告能直接定位具体参数场景2026.08.19
  625. 第 34 课Repository Flow 转 StateFlow当本地数据库、缓存或网络数据持续变化时,详情页可以自动收到最新结果,不必每次都手动调用 load()。2026.08.19
  626. 第 35 课Hypium 异步失败参数化测试适用场景:同一个异步接口会因多种非法输入而失败,需要确认每种输入都以约定的错误信息拒绝2026.08.20
  627. 第 35 课combine 合并多个 Flow一个详情页往往同时依赖商品信息和收藏状态。任意数据源发生变化时,页面都应重新计算并显示一致的最新结果。2026.08.20
  628. 第 36 课Hypium 可控 Promise 时序测试适用场景:业务必须等待保存、请求或授权完成后才能更新结果,需要验证等待期间不会提前执行后续动作2026.08.21
  629. 第 36 课catch 转换 Flow 异常数据库读取或网络同步失败时,页面不会因为未处理异常而中断,而是稳定显示“加载失败”等错误内容。2026.08.21
  630. 第 37 课Hypium 可控 Promise 失败时序测试适用场景:保存、请求或授权失败后必须把异常交给调用方,同时禁止继续提交成功状态或发送成功通知2026.08.22
  631. 第 37 课retryWhen 有限重试网络短暂中断等临时故障可能很快恢复。与其立即展示错误,可以先自动重试;同时限制次数并筛选异常类型,避免无限重试或掩盖程序错误。2026.08.22
  632. 第 38 课Hypium 可控 Promise 多阶段时序测试适用场景:业务必须依次完成保存、上传、通知或授权等多个异步步骤,需要证明后一步不会提前启动2026.08.24
  633. 第 38 课debounce 处理搜索输入用户输入搜索词时,每敲一个字符都会产生新值。如果立即查询,容易触发大量无效请求;debounce() 可以等用户短暂停顿后再继续处理。2026.08.24
  634. 第 39 课Hypium 多阶段中间失败测试适用场景:保存、校验、上传等步骤必须串行执行,且任一中间步骤失败后都要立即中止后续动作并向上传递错误2026.08.25
  635. 第 39 课flatMapLatest 只保留最新搜索搜索词变化后,旧请求可能比新请求更晚返回,导致页面显示过期结果。flatMapLatest() 会切换到最新查询对应的 Flow,避免旧结果覆盖新结果。2026.08.25
  636. 第 40 课Hypium 多阶段失败矩阵适用场景:保存、校验、上传等多阶段流程需要系统验证“任一步失败后,只停止其后的步骤”2026.08.26
  637. 第 40 课distinctUntilChanged 过滤重复输入搜索词经过 trim() 等处理后,不同的原始输入可能变成同一个值。过滤这些连续重复值,可以避免再次发起语义相同的搜索。2026.08.26
  638. 第 41 课Hypium 多阶段测试共享夹具与用例隔离适用场景:多个成功或失败用例共用测试结构,但事件记录、失败配置和被测对象会在运行中改变2026.08.27
  639. 第 41 课onStart 发送加载状态搜索请求发出后、结果返回前,页面需要显示正在加载。把 Loading 也放进 Flow,可以让界面只渲染统一的 SearchUiState,不必额外维护加载开关。2026.08.27
  640. 第 42 课onEach 观察状态变化共享层常需要记录状态日志或调试数据流。onEach() 可以观察每个状态,同时保持原值不变,让 UI 继续消费同一条状态流。2026.08.28
  641. 第 42 课Hypium afterEach 资源清理测试中的订阅如果没有清理,可能继续接收后续用例的事件,造成重复回调或与执行顺序有关的失败。afterEach 可以集中执行每个用例都需要的回收动作。2026.08.31
  642. 第 43 课launchIn 启动 Flow 收集当共享层只需要执行日志、埋点等观察动作,不需要在 collect 代码块中处理值时,可以把 onEach() 与 launchIn() 组合成清晰的数据流管道。2026.08.31
  643. 第 43 课Hypium 异步 afterEach 清理等待清理 Promise 完成,避免下一个用例在旧资源尚未关闭时启动。2026.09.01
  644. 第 44 课shareIn 共享上游 Flow多个观察者订阅昂贵的冷 Flow 时,可共享一次网络监听或数据源收集。2026.09.01
  645. 第 44 课Hypium清理失败传播测试单独测试资源关闭失败时,清理函数是否把错误传给调用者。2026.09.02
  646. 第 45 课状态流与事件流的语义选择避免把连续两次相同操作误当成同一份状态。2026.09.02
  647. 第 45 课清理测试的独立夹具让清理成功、失败两个用例不依赖执行顺序或上一个用例的资源状态。2026.09.03
  648. 第 46 课SharedFlow订阅时机测试用确定的调度步骤验证晚订阅者不会收到 replay=0 的历史事件。2026.09.03
  649. 第 46 课顺序重复关闭的幂等契约验证已成功关闭的资源再次关闭时不会重复释放。2026.09.04
  650. 第 47 课WhileSubscribed停止时机测试验证最后一个订阅者离开后,上游是否按设定超时停止。2026.09.04
  651. 第 47 课关闭失败后的顺序重试验证首次释放失败后第二次 close 仍真正重试。2026.09.07
  652. 第 48 课replay缓存与重新订阅验证新订阅者能否收到最近缓存状态。2026.09.07
  653. 第 48 课并发关闭共享同一次释放两个调用者同时关闭资源时,只执行一次底层释放,并让双方等待同一个结果。2026.09.08
  654. 第 49 课resetReplayCache清空事件缓存在一次性事件已被处理后清空旧缓存,避免后续订阅者再次收到它。2026.09.08
  655. 第 49 课释放完成后清理并发标记让并发关闭只复用进行中的任务,并在释放完成后清理临时状态。2026.09.09
  656. 第 50 课subscriptionCount观察订阅者观察共享流当前是否有活跃订阅者,为按需启动上游工作提供判断依据。2026.09.09
  657. 第 50 课关闭成功后保持已释放状态避免成功释放后再次执行底层释放。2026.09.10
  658. 第 51 课订阅者驱动上游启停只在共享流有人订阅时运行昂贵的轮询任务。2026.09.10
  659. 第 51 课并发关闭成功状态测试验证并发释放完成后,后续关闭不会再次触发底层释放。2026.09.11
  660. 第 52 课订阅状态去重启停命令避免订阅者数量变化但启停状态未变时重复执行命令。2026.09.11
  661. 第 52 课关闭失败后的重试契约验证一次释放失败后,下一次关闭仍能重新调用底层释放。2026.09.14
  662. 第 53 课WhileSubscribed重启上游测试验证最后一个订阅者离开后,再次订阅会按策略重新启动上游。2026.09.14
  663. 第 53 课关闭状态只读查询让调用方判断资源是否已经成功关闭,同时不获得修改内部状态的权限。2026.09.15
  664. 第 54 课replayExpirationMillis清理回放订阅停止后按策略清除共享流的旧回放值。2026.09.15
  665. 第 54 课根据关闭状态禁用按钮让按钮读取 Handle 的关闭事实,为后续点击交互准备禁用条件。2026.09.16
  666. 第 55 课advanceTimeBy验证回放过期用虚拟时间精确推进 replayExpirationMillis 边界。2026.09.16
  667. 第 55 课按钮点击触发关闭让按钮点击调用上一课同一个 Handle 的关闭动作。2026.09.17
  668. 第 56 课runCurrent执行到期任务只执行当前虚拟时间点已排队的协程任务。2026.09.17
  669. 第 56 课异步关闭期间显示进行中状态关闭操作未完成时显示进度文字,并在操作结束后重新读取 Handle 的结果。2026.09.18
  670. 第 57 课advanceUntilIdle清空队列在协程测试中推进虚拟时间,直到没有待执行任务。2026.09.18
  671. 第 57 课关闭失败时显示提示让关闭失败的用户看到可重试信息。2026.09.21
  672. 第 58 课对比runCurrent与advanceUntilIdle观察延迟任务在两个测试调度步骤后的状态。2026.09.21
  673. 第 58 课失败后按钮提示重试关闭失败后让用户明确知道同一个按钮可以重试,不新增第二份关闭状态。2026.09.22
  674. 第 59 课advanceTimeBy 推进部分虚拟时间不清空所有任务,只观察延迟任务到期前的中间状态。2026.09.22
  675. 第 59 课重试开始时清除旧失败提示用户点击“重试关闭”后,不让上一次失败提示继续停留在进行中界面。2026.09.23
  676. 第 60 课advanceTimeBy 检查边界任务测试延迟任务在指定毫秒到达前后是否执行。2026.09.23
  677. 第 60 课互斥显示关闭结果关闭结束后,在按钮下方给出清楚的结果,同时避免“已关闭”和失败提示并存。2026.09.24
  678. 第 61 课比较边界前一毫秒与到期时刻精确测试异步任务在截止时间前不会提前完成,并在截止时执行。2026.09.24
  679. 第 61 课为关闭结果补充无障碍说明为互斥结果文字补充无障碍说明。2026.09.29
  680. 第 62 课验证多个延迟任务的执行顺序测试两个不同延迟的任务不会提前或乱序完成。2026.09.28
  681. 第 62 课用资源提供关闭结果说明让关闭结果的无障碍说明随应用资源统一管理。2026.09.30
  682. 第 63 课记录延迟任务完成时刻在虚拟时间测试中记录每个任务的完成时刻。2026.09.29
  683. 第 64 课断言虚拟时间完成点在测试中把任务完成时刻变成可回归的断言。2026.09.30