渲染底座、语言基础、网络层与状态管理库。

一、渲染

Skia渲染引擎

Skia 是 Google 的 2D 图形库,给 Chrome、Android 和 Flutter 提供路径、位图、文字和着色器。它把绘制命令记录成管线,再交给 CPU 光栅或 GPU 后端(OpenGL、Vulkan、Metal)。

对 Flutter 开发者而言,了解 Skia 有助于解释为什么复杂 Clip、保存层和模糊会变贵:每一次 saveLayer 都可能分配离屏缓冲。Impeller 正在部分平台替代 Skia 做运行时渲染,但 Skia 的绘图模型仍然影响如何写自定义 Painter。排查卡顿时看 raster 线程和 GPU 内存,而不是只盯着 Dart 代码。能合并绘制调用就不要拆成多层半透明组件。

二、语言与网络

Flutter Dart基础

Dart 是 Flutter 的语言:强类型、空安全、async/await 和 isolate。基础类型、集合、级联和扩展方法每天都用。空安全用 ? 和 ! 表达可空,late 要谨慎。Future 与 Stream 是异步两套模型。理解这些才能读懂 Widget 代码里的异步坑,而不只是复制套件。

运算符注意 ??. 、?. 和级联 .. 的优先级。泛型在集合和仓库接口上很常见。不要用 dynamic 逃避类型。调试 isolate 时记住内存不共享。官方语言导程比零散博客系统。写业务前先把空安全和异步模型练熟,后面状态管理和插件桥接会少很多莫名异常。类型是文档,也是编译器帮你抓的测试。

Flutter 网络请求

Flutter 网络请求要分层:UI 调仓库,仓库调 API 客户端,客户端处理 HTTP。超时、证书、header 和 JSON 解析集中在客户端。错误分成网络失败、业务码失败和序列化失败,页面才好提示。取消请求与页面生命周期绑定,避免卸载后 setState。

鉴权用拦截器刷新 token,注意并发刷新只跑一次。分页和缓存策略写在仓库,不写在 Widget。调试可开 Charles,但生产关闭详细 body 日志。证书锁定适合高安全应用。测试打桩客户端而不是真打网。网络层稳定后,业务接口增加才不会每个页面复制一套 try/catch。先把错误模型和超时设对,比换库更要紧。

Flutter 第三方开源库 GetX

GetX 把状态、路由和依赖注入放在同一套 API 里。Obx 与 GetBuilder 监听响应式变量,Get.to 跳转页面,Get.put 注册控制器。上手快,样板少,适合小团队快速出页面。代价是全局单例多、生命周期要自己小心,大型应用容易变成隐式依赖网。

控制器用 onClose 释放,页面销毁后不要再更新。路由参数用类型安全的方式传,避免动态 map。能局部重建就不要 Obx 包整页。和官方导航混用时要统一栈。测试时 Get.reset 清状态。GetX 适合中小项目提速,一旦多人协作、模块边界变多,更该把状态和路由拆回可测试的方案。选型看团队纪律,而不是看谁的语法最短。