第四章 让应用活起来:状态与导航


第四章 · 让应用活起来

章节摘要:第 3 章的界面是漂亮的静物,本章给它接上神经与腿脚。前半章处理"数据变了界面怎么知道":从 setState 的天花板出发,把 Provider、Riverpod、Bloc 请到同一张桌上比武,再用单向数据流的架构把状态组织成可测试的形状,最后让账单在重启应用后依然还在。后半章处理"页面之间怎么走":Navigator 两代的路由观、声明式路由的写法、深度链接与转场。读完本章,轻记账从"单屏演示"升格为"多页面应用"。

学习目标

读完本章,你应当能够:

  1. 说清 setState 的适用边界,判断一个状态该留在组件内还是上提到全局;
  2. 在 Provider、Riverpod、Bloc 之间为给定项目做选型,并给出至少两条理由;
  3. 按单向数据流组织一个页面的状态:模型不可变、仓库管来源、控制器管变化;
  4. 为轻记账接上本地持久化,重启后账单不丢,并能说出键值与数据库的适用分界;
  5. 用声明式路由表管理全部页面路径,让 Web 端地址栏与移动端行为一致;
  6. 配置深度链接,从系统级入口直达某条账单详情页。

核心概念速览

一句话立住本章:状态管理的本质不是选库,而是给每种数据找到一个唯一的家;路由的本质不是压栈弹栈,而是把"界面"变成可寻址的东西。

子章节导航

04-1 状态管理选型现场:setState 够用到哪一步,InheritedWidget 如何成为所有方案的底座,三大主流方案各自把什么问题解决到什么程度。本节是一场有结论的比武。

04-2 数据流设计:单向流动与响应式:与选哪个库无关的架构纪律——数据只朝一个方向流,模型不可变,仓库隔离数据来源。本节的内容在换任何状态库后都依然成立。

04-3 状态持久化落地:键值存储管偏好设置,嵌入式数据库管结构化账单,读写与迁移的完整代码。重启不丢数据,是"应用"区别于"页面"的底线。

04-4 路由两代记:从 Navigator 1.0 的栈模型到 2.0 的声明式路由表,深度链接把账单详情变成一个地址,转场动画复用第 3 章的工艺。

子章节之间的逻辑关系

前两节是"思考框架",后两节是"落地件"。04-1 选出的方案要在 04-2 的数据流纪律下使用才不失控;04-3 的持久化为 04-4 的路由表提供启动参数(冷启动直接进某条账单,前提是账单在本地);反过来,路由表的守卫逻辑又要读状态(未登录跳登录页)。四节合起来,是第 5 章网络同步的完整地基——状态有了家、数据有了库、页面有了地址,跨设备的同步才有处落。

本章知识点清单

以下条目均可自测,答不出的就是没读透的位置:

  • 说出状态上提的三个信号:参数击鼓传花、数据多处副本、刷新范围失控;
  • 解释 InheritedWidget 与各状态管理方案的关系,以及各方案各自解什么;
  • 复述单向数据流回路,说明为什么修改只能发生在控制器动作里;
  • 为模型补齐 copyWith、== 与 hashCode,并说出列表 diff 依赖哪两项;
  • 按数据形状选存储:整块配置用键值,记录集上数据库,并说明列表塞键值为何是反模式;
  • 写出异步装载加骨架屏的启动读盘方案,说明为何不在 main 同步等库;
  • 对比两代路由的 心智模型,说出栈模型的三个死结与声明式的直达能力。
[04-1 选型] ──定工具──> [04-2 数据流纪律] ──组织好──> [内存中的状态] │ [04-4 路由表] <──供启动与跳转── [04-3 持久化] <──落盘──┘ ​

前置知识与后续延伸

前置:第 3 章的状态归属判断(03-1)与 InheritedWidget 的存在(02-2、03-4 的 Theme 机制就是它);不要求异步之外的 Dart 高级特性。

延伸:04-1 的选型结论将贯穿第 5 章(仓库模式接网络层)与第 6 章(状态粒度与重建优化);04-3 的数据库选型讨论在 Web 端要按第 7 章的存储差异重新裁决;04-4 的声明式路由是 Web 端地址栏可用、桌面端窗口标题正确的前提。学完本章,建议把轻记账从单页改造成四页(今日、统计、账单详情、设置),后续章节的所有功能都挂在这张页面地图上。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U