Flutter大版本升级:2.10.5升级至3.27.4

3,022 阅读4分钟

代码探索者.webp

背景

太想进步了,最近准备搞搞升级。

从 Flutter 2.10.5 升级到 3.27.4 版本将带来显著的框架特性增强、性能优化及开发工具改进。以下是主要提升点:

一、框架特性增强

  1. Cupertino 组件高保真优化

    • 更新了CupertinoCheckboxCupertinoRadioCupertinoSwitch的视觉细节(如大小、颜色、交互效果),新增语义标签、鼠标光标支持及tinted按钮构造函数,使 iOS 风格组件更贴近原生体验。
    • CupertinoNavigationBar支持透明背景动态适配,实现折叠与展开状态的平滑颜色过渡。
  2. Material 设计改进

    • 优化了RowColumn的间距布局逻辑,减少手动调整成本。
    • 新增主题属性支持更灵活的 UI 定制。
  3. 平台适配扩展

    • 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指令都会报错。

bfee4d70326a39ab5b6ee0a7d9f45a2.png 经过多次检查环境变量,显示引入flutter_templete_images: ^5.0.0也无法解决这个问题。清理掉所有缓存包重新下载也解决不了。

不得已打开flutter3.27.4源码研究才发现,里面工具包flutter_tools本身在pubspec.yaml中的版本引入和flutter3.27.4不兼容,修正了一下终于好了。

image.png 在Vscode中使用时需要在settings.json中配置一下dart.flutterSdkPath的指定路径,由flutter2.10.5切到flutter3.27.4。

业务依赖包适配

回到业务上来看,首先用AI刷一遍pubspec.yaml中第三方包版本,不得不说效率很高。

image.png 刷完后运行发现有些第三方包作者没有继续维护,意味着没有对应版本号来适配。

  • text_to_speech拉取到本地自己维护一下引入也能兼容
  • futter_my_picker研究了一下,修改成本太高,不得不用flutter_datetime_picker替换掉
  • qiniu的sdk和dio冲突了,dio升级到最新版本

flutter_datetime_picker引入后发现插件本身也报错。 image.png 不得已又拉到本地,修改了一下命名冲突问题,并增加了清空功能重新引入。

JAVA jdk升级

启动继续报错,gradle必须升级成classpath 'com.android.tools.build:gradle:7.4.0',Java8也得配合着升级到Java11。

  1. 打开Oracle 官方 Java 下载页面
  2. 页面中找到对应操作系统的 Java 11 版本下载链接,如 Windows 系统通常选择 “jdk-11.0.24_windows-x64_bin.exe”。
  3. 点击链接后可能会弹出登录窗口,需要注册并登录 Oracle 账号。若没有账号需先进行注册。
  4. 登录后勾选 “I reviewed……”,然后点击 “download jdk-11.0.24……”,选择下载路径并点击 “保存” 即可。

第一次下载的是压缩包格式,解压完配置环境变量重启电脑发现没切过来。直接下载exe格式安装再重启才把Java应用版本切到11。

语法修正

调用deepseek api全项目检查了一遍语法问题,同步修正了一下。剩余的主要是:

  • 采色问题Theme.of(context).canvasColor主题色的应用出现差异,手动修正一下
  • dio升级后,重构Refresh Token逻辑

项目中虽然存在一些弃用标记的语法,不过也能使用就没进一步升级修正。

效果

APP的加载速度有一定提高,部分控件的展示风格有些变化(例如:Tabs)。Text原生控件的默认文本颜色由之前的黑色变成紫色。画质感觉清晰了一些,也可能是错觉。大体上已经能完全跑业务,一些细节问题可能还未发现。

未标题-1.png

后记

整个升级过程主要解决Flutter3.27.4 SDK集成问题和第三方包兼容问题,对原有业务代码部分影响不是很大,整体升级过程还算顺利。