章节摘要:第 3 章的界面是漂亮的静物,本章给它接上神经与腿脚。前半章处理"数据变了界面怎么知道":从 setState 的天花板出发,把 Provider、Riverpod、Bloc 请到同一张桌上比武,再用单向数据流的架构把状态组织成可测试的形状,最后让账单在重启应用后依然还在。后半章处理"页面之间怎么走":Navigator 两代的路由观、声明式路由的写法、深度链接与转场。读完本章,轻记账从"单屏演示"升格为"多页面应用"。
读完本章,你应当能够:
一句话立住本章:状态管理的本质不是选库,而是给每种数据找到一个唯一的家;路由的本质不是压栈弹栈,而是把"界面"变成可寻址的东西。
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 章网络同步的完整地基——状态有了家、数据有了库、页面有了地址,跨设备的同步才有处落。
以下条目均可自测,答不出的就是没读透的位置:
[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 端地址栏可用、桌面端窗口标题正确的前提。学完本章,建议把轻记账从单页改造成四页(今日、统计、账单详情、设置),后续章节的所有功能都挂在这张页面地图上。