【Fultter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!
点击关注公众号,“技术干货” 及时达!
Flutter升级3.24版本的流程
前言
Fultter 的版本更新一直都是比较快的,对于开发者来说不是每次都更新到最新的版本就万事大吉,我们一般都是用一段时间来定一个版本,再观望其效果和对应的生态,最终决定是否升级。
我们开发者主要看的是 Flutter 的渲染性能,插件的支持兼容程度,是否存在严重的 Bug 和一些废弃的 API 和 Widget 的修改,是否新增了想要的控件等等因素。
现在,Flutter 3.24 以及 Dart 3.5 在稳定渠道的推出,我个人觉得比较不错。此次更新通过优化渲染引擎和内存管理使得性能显着提升,应用运行更加流畅。并且修复了一些 Bug,是我个人比较不错的推荐升级一个版本。
我个人比较推荐3.16 3.19 3.24这几个版本,我个人的电脑也安装了这三个版本。目前从3.19升级到3.24的过程有哪些坑,修复了哪些问题,哪些需要注意的位置,在网页中我会给大家指出,也希望大家少踩坑了。
一、升级流程
如果想替换之前的版本那么直接运行flutter升级即可。如果想有多个Flutter版本,那么可以到官网下载对应版本的Flutter到本地,配置对应的环境变量即可。【传送门】
我个人使用的是第二种方式,配置了多个 Fultter 版本。
配置完成之后可以查看环境变量以及输出命令
别忘记了配置AS中对应项目的Flutter版本,不然也不会有效果哦。
二、变动
ModalRoute 的便利
由于最初涉及在 Web 端上按 Tab 键切换焦点的问题,原来到 ModalRoute 的类
最终导致的是移动端的跳转页面返回页面会造成页面的重建,只要使用到 ModalRoute 类进行监听去获取路由参数等操作都会导致重建。
可以看我们的页面 onPause 和 onResume 是可以正常触发的,但是每次 onPause 和 onResume 的时候就会重新构建一次,听说 Fultter 3.24 版本修复了这个漏洞。
本质上就是新添加了几个API,在ModalRoute获取内部常用属性的一些入口快速做了场景化封装。
例如我们想要获取路由的设置获取参数之类的,我们可以使用新的方式
final arguments = ModalRoute.settingsOf(context)?.arguments;
但是如果我们还是想要通过 Router 的监听实现监听周期的监听,那你还是可以获得 ModalRoute 这个对象
final route = ModalRoute.of(context);
if (route != null && route is PageRoute) {
routeObserver.subscribe(this, route); // 订阅至RouteObserver
}
WidgetsBinding.instance.addObserver(this); // 添加至WidgetsBinding观察者现在毫无例外修改,你仍然会重建的困扰,那么我们只能回到原点,如果真的想要这种方式确实不重复构建页面,我们也只能源码这种方式暂时解决这个问题把Web端的那个注释掉了。
在ModalRoute类中修改如下代码:
或者我们抛弃这种方式使用visibility_detector的方式监听页面,具体可以参考我之前的文章。
你的变动
默认支持了 Material You 的风格,但是国内的开发环境,懂的都懂,用完全达不到直接是负体验,甚至我们需要增强一些 Material You 的效果,比如入口的配置设置,Appbar 的滚动可视化处理等等。
API 的报错
主要是一些API不再支持,删除了一些API,导致项目报错。
主要是 WidgetsBindingObserver 新增的几个回调,以及 ThemeData 的字段调整。
// 3.24.0 新加的回调
@override
void didChangeViewFocus(ViewFocusEvent event) {}@override
void handleCancelBackGesture() {}
@override
void handleCommitBackGesture() {}
@override
bool handleStartBackGesture(PredictiveBackEvent backEvent) {
return false;
}
@override
void handleUpdateBackGestureProgress(PredictiveBackEvent backEvent) {}
我们只需要默认实现并获取一些ThemeData即可。
无法运行的问题
无论你是否支持window平台,可能部分插件自带的win32依赖你也需要升级到最新版本,否则无法运行
# 5.5.0 报错,这里强制指定版本适配 Flutter 版本 3.24.0
win32: 5.5.4
Android的项目不支持apply plugin的方式,统一只能用id的方案了。
plugins {
id "com.android.application"
id "kotlin-android"
id "kotlin-kapt"
id "dev.flutter.flutter-gradle-plugin"
}
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.1.2" apply false
id "org.jetbrains.kotlin.android" version "1.8.0" apply false
}
如果您仍使用旧版本的依赖方式,例如:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
现在请你检查你的 android 包下面的 .gradle 文件需要替换依赖方式哦。
三、新功能
新的 Sliver 组件:Flutter 3.24 引入了新的 Sliver 组件,允许开发者实现动态的应用栏行为,如浮动、固定或调整大小的头部设计,使 UI 更加灵活和交互。
细长浮动标题 固定标题条 SliverResizingHeader
之前这篇文章我们讲过,其实就是Appbar的各种行为的一个封装,可以去掉Appbar这个控件单独搭配其他的控件使用。
新的控件TreeView
这个其实也很好理解,它用于构建可以在所有方向的滚动的升级树形结构,关键是它支持各种方向的滚动,很好用。并且还生成了TreeSliver配合需要在列表中使用。我们自定义实现的,现在官方给我们落实了。
新的控件轮播查看轮播
简单的轮播控件我们都是一般使用第三方的插件,好用的轮播插件太多了,这里官方出的轮播比较,如果是简单的轮播需求不想导入第三方的插件可以试试。
叶轮性能优化
老生谈的问题,一直在优化中。
iOS 的 Swift 包 部分支持
支持初步的访问 Swift 包生态系统。Flutter 插件将能够利用不断增长的 Swift 包生态系统!简化 Flutter 安装。
Swift Package Manager 与 Xcode 捆绑在一起。未来,开发者安装 Ruby 和 CocoaPods 就可以在 Apple 平台上使用 Flutter。
我们还是用 CocoaPods ,目前也没有尝试过,但是高级说不定有用。
PreferencesDataStore 的默认支持
SharedPreferences 默认使用 PreferencesDataStore 了而不是 SharedPreferences 了,这...我只能说太激进了。不过对于开发者和用户来说没什么区别,API 还是那样。
对探查器和链接工具进行了优化,取得了常规改进。
这一点我倒是有触感,确实好用了很多。
后续
本文详细介绍了3.24版本的新特性和修复的问题,以及升级到3.24需要注意的坑。
总的来说还是比较以上的,目前用了一段时间也没有回退版本的打算,还行,大家有此需求也可以放心冲。
今天的分享就到这里啦,当然如果你有其他的问题或者踩坑点,也希望大家能评论区交流一起学习进步。如果我的文章有错别字,不通顺的,或者代码、注释、有错漏的哪里,同学们都可以指出修改。
如果感觉这篇文章对你有一点启发和帮助,还希望你能点赞支持一下,你的支持对我真的很重要。
Ok,这一期就此结束。