哆啦A梦小短腿

可持久化倒计时的设计:App 杀死、设备重启后如何续算与失效

一句话概括:倒计时不要存「还剩几秒」,而要存「一个不可篡改的时间基准点 + 总时长」,每次进来用当前时间反推剩余。 这样 App 被杀重启能无缝续算、设备重启能自动判失效、用户改系统时间也没法作弊。本文以验证码重发冷却场景为例,拆解一个可持久化倒计时组件 CountDownUtil 的完整设计与源码脉络。 一、功能定位 CountDownUtil 是一个 object 单例,负责验证码发...

Dart 事件循环与 Isolate 详解

“Dart 是单线程的,为什么还能处理异步?”“async/await 到底开没开新线程?”“什么时候必须用 Isolate?”——这几个问题几乎是 Flutter 面试的必考题,也是很多人一直没彻底想通的地方。根源在于 Dart 用两套完全不同的机制处理并发:事件循环负责异步(并发但不并行),Isolate 负责真正的并行。这篇一次讲透。 关联阅读:Dart 主 isolate 就...

Flutter 状态管理横评:Provider / Riverpod / Bloc / GetX

“Flutter 状态管理到底该用哪个”大概是社区里最经久不衰的争论。原因也不难理解:Flutter 官方只给了 setState 和 InheritedWidget 两块地基,上层方案百花齐放。本文横向对比四个最主流的方案——Provider、Riverpod、Bloc、GetX,用同一个例子把它们的写法、心智模型、优缺点摆在一起,最后给一份可落地的选型建议。 前置知识:状态管理的...

Flutter setState、Element 更新与 Key 的作用详解

这是 Flutter 渲染原理系列的第三篇。前两篇《Flutter 三棵树:Widget、Element、RenderObject 详解》和《Flutter 渲染管线:从 build 到上屏》分别讲了结构和流程。这一篇聚焦一个每天都在用、却最容易踩坑的三角关系:setState 触发了什么 → Element 如何决定复用还是重建 → Key 如何干预这个决定。搞懂这条链,”交换列表项后状态...

Flutter 三棵树:Widget、Element、RenderObject 详解

写 Flutter 时你天天在写 Widget,但真正把像素画到屏幕上的并不是它。Flutter 的 UI 由三棵并行的树协作完成:Widget 树、Element 树、RenderObject 树。理解这三棵树各自的职责与协作方式,是搞懂 Flutter 重建、性能优化、Key 用法乃至各种”玄学 bug”的根基。 本文只讲结构与协作机制;从一帧的完整生命周期(build → layou...