背景
太想进步了,最近准备搞搞升级。
从 Flutter 2.10.5 升级到 3.27.4 版本将带来显著的框架特性增强、性能优化及开发工具改进。以下是主要提升点:
一、框架特性增强
-
Cupertino 组件高保真优化
- 更新了
CupertinoCheckbox、CupertinoRadio和CupertinoSwitch的视觉细节(如大小、颜色、交互效果),新增语义标签、鼠标光标支持及tinted按钮构造函数,使 iOS 风格组件更贴近原生体验。 CupertinoNavigationBar支持透明背景动态适配,实现折叠与展开状态的平滑颜色过渡。
- 更新了
-
Material 设计改进
- 优化了
Row和Column的间距布局逻辑,减少手动调整成本。 - 新增主题属性支持更灵活的 UI 定制。
- 优化了
-
平台适配扩展
- Android:默认启用 Impeller 渲染引擎,提升图形渲染性能;支持 Edge-to-Edge 布局及 Freeform 窗口模式。
- iOS:通过 Swift Package Manager(SPM)优化插件管理,弃用 Objective-C 框架,需检查现有插件兼容性。
- Web:增强 CanvasKit 渲染性能,支持更复杂的动画和交互。
二、性能与渲染优化
- Impeller 渲染引擎:在 Android 端默认启用,减少 Jank 问题,提升动画和复杂 UI 的流畅度。
- P3 广色域支持:允许应用展示更丰富的色彩,提升视觉表现力。
- 内存与启动优化:iOS 端通过 Dart VM 改进减少内存占用,加快冷启动速度。
踩坑
集成SDK
官网下载3.27.4的Flutter sdk放置后之前安装目录,解压并更新环境变量。结果无论运行什么flutter指令都会报错。
经过多次检查环境变量,显示引入
flutter_templete_images: ^5.0.0也无法解决这个问题。清理掉所有缓存包重新下载也解决不了。
不得已打开flutter3.27.4源码研究才发现,里面工具包flutter_tools本身在pubspec.yaml中的版本引入和flutter3.27.4不兼容,修正了一下终于好了。
在Vscode中使用时需要在settings.json中配置一下
dart.flutterSdkPath的指定路径,由flutter2.10.5切到flutter3.27.4。
业务依赖包适配
回到业务上来看,首先用AI刷一遍pubspec.yaml中第三方包版本,不得不说效率很高。
刷完后运行发现有些第三方包作者没有继续维护,意味着没有对应版本号来适配。
text_to_speech拉取到本地自己维护一下引入也能兼容futter_my_picker研究了一下,修改成本太高,不得不用flutter_datetime_picker替换掉qiniu的sdk和dio冲突了,dio升级到最新版本
flutter_datetime_picker引入后发现插件本身也报错。
不得已又拉到本地,修改了一下命名冲突问题,并增加了清空功能重新引入。
JAVA jdk升级
启动继续报错,gradle必须升级成classpath 'com.android.tools.build:gradle:7.4.0',Java8也得配合着升级到Java11。
- 打开Oracle 官方 Java 下载页面。
- 页面中找到对应操作系统的 Java 11 版本下载链接,如 Windows 系统通常选择 “jdk-11.0.24_windows-x64_bin.exe”。
- 点击链接后可能会弹出登录窗口,需要注册并登录 Oracle 账号。若没有账号需先进行注册。
- 登录后勾选 “I reviewed……”,然后点击 “download jdk-11.0.24……”,选择下载路径并点击 “保存” 即可。
第一次下载的是压缩包格式,解压完配置环境变量重启电脑发现没切过来。直接下载exe格式安装再重启才把Java应用版本切到11。
语法修正
调用deepseek api全项目检查了一遍语法问题,同步修正了一下。剩余的主要是:
- 采色问题
Theme.of(context).canvasColor主题色的应用出现差异,手动修正一下 - dio升级后,重构
Refresh Token逻辑
项目中虽然存在一些弃用标记的语法,不过也能使用就没进一步升级修正。
效果
APP的加载速度有一定提高,部分控件的展示风格有些变化(例如:Tabs)。Text原生控件的默认文本颜色由之前的黑色变成紫色。画质感觉清晰了一些,也可能是错觉。大体上已经能完全跑业务,一些细节问题可能还未发现。
后记
整个升级过程主要解决Flutter3.27.4 SDK集成问题和第三方包兼容问题,对原有业务代码部分影响不是很大,整体升级过程还算顺利。