likes
comments
collection
share

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

作者站长头像
站长
· 阅读数 23

Flutter 升级3.24版本的过程

前言

Flutter 的版本更新一直都是比较快的,对于开发者来说并不是每次都是更新到最新的版本就万事大吉,我们一般都是锚定一个版本用一段时间,再观望其效果和对应的生态,最终决定是否升级。

我们开发者主要是看 Flutter 的渲染性能,插件的支持兼容程度,是否有严重的Bug和一些废弃的API和Widget的修改,是否新增了想要的控件等等因素。

现在,Flutter 3.24 以及 Dart 3.5 在稳定渠道的推出,我个人觉得比较不错。此次更新通过优化渲染引擎和内存管理使得的性能显著提升,应用运行更加流畅。并且修复了一些Bug,是我个人比较推荐升级的一个版本。

我个人比较推荐 3.16 3.19 3.24 这几个版本,我个人的电脑也是安装了这三个版本。目前从 3.19 升级到 3.24 的过程有哪些坑,修复了哪些问题,哪些需要注意的地方,在本文中我都会给大家指出,也是希望大家少踩坑了。

一、升级过程

如果想替换之前的版本那么直接运行 flutter upgrade 即可。如果想有多个 Flutter 版本,那么可以到官网下载对应的版本的 Flutter 到本地,配置对应的环境变量即可。【传送门】

我个人是使用的第二种方式,配置了多个 Flutter 版本。

配置完成之后可以查看环境变量以及输出命令

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

别忘记了配置 AS 中对应项目的 Flutter 版本,否则也不会有效果哦。

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

二、变动

  1. ModalRoute 的变动

最初由于涉及在 Web 端上按 Tab 键切换焦点的问题,改动到 ModalRoute 的类

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

最终导致的是移动端的跳转页面返回页面会造成页面的 rebuild,也就是说只要使用到 ModalRoute 类去做监听去拿路由参数等操作都会导致 rebuild.

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

可以看到我们的页面 onPause 和 onResume 是可以正常触发,但是每次 onPause 和 onResume 的时候就会重新 build 一次,听说 Flutter 3.24 版本修复了这个漏洞。

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

其实就是新添加了几个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观察者

那么毫无例外,你还是会有 rebuild 的困扰,那么我们只能回到原点,如果实在是想要这个方式确不想重复 build 页面,我们也只能修改源码这一种方式暂时解决这个问题把 Web 端的那个改动注释掉。

在 ModalRoute 类中修改如下代码:

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

或者我们抛弃这种方式使用 visibility_detector 的方式监听页面,具体可以参考我之前的文章。

  1. Material You 的变动

默认支持了 Material You 的风格,但是国内的开发环境,懂的都懂,完全用不到直接是负体验,甚至我们需要去除一些 Material You 的效果,比如入口的配置设置,Appbar的滚动变色处理等等。

  1. 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即可。

  1. 无法运行的问题

不管你是否支持 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 文件需要替换依赖方式哦。

三、新特性

  1. 新 Sliver 组件:Flutter 3.24 引入了新的Sliver组件,允许开发者实现动态的应用栏行为,如浮动、固定或调整大小的头部设计,使得UI更加灵活和互动。
  • SliverFloatingHeader
  • PinnedHeaderSliver
  • SliverResizingHeader

这个之前的文章我们讲到过,其实就是 Appbar 的各种行为的一个封装,可以脱离 Appbar 这个控件单独配合其他的控件使用。

  1. 新的控件 TreeView

这个其实也很好理解,它用于构建可以在所有方向滚动的高性能树形结构,关键是它支持各种方向的滚动,很好用。并且还出了 TreeSliver 配合在列表中使用。之前需要我们自定义实现的,现在官方给我们做好了。

  1. 新的控件 CarouselView 轮播

轮播控件我们一般都是使用第三方的插件,好用的轮播插件太多了,这里官方出的轮播比较简单,如果是简单的轮播需求不想导入第三方的插件可以试试。

  1. Impeller 性能优化

老生长谈的问题,一直在优化中。

  1. iOS 的 Swift Package 部分支持

支持初步的访问 Swift package 生态系统。Flutter 插件将能够利用不断增长的 Swift package 生态系统!简化 Flutter 安装。

Swift Package Manager 与 Xcode 捆绑在一起。将来,开发者无需安装 Ruby 和 CocoaPods 就可以在 Apple 平台上使用 Flutter。

不过我们还是用的 CocoaPods ,目前也没有尝试过,后期说不定有用。

  1. PreferencesDataStore 的默认支持

SharedPreferences 默认使用 PreferencesDataStore 了而不是 SharedPreferences 了,这...我只能说太激进了。不过对于开发者和用户来说没什么区别,API还是那样。

  1. 对 profiler 和 Links 工具进行优化做出了常规改进。

这一点我倒是有感触,确实好用了很多。

后记

本文大致介绍了 3.24 版本的新特性和修复的问题,以及升级到 3.24 需要注意的坑。

总的来说还是比较顺畅的,目前用了一段时间也没有回退版本的打算,还行,大家有此需求也可以放心冲。

今天的分享就到这里啦,当然如果你有其他的问题或者踩坑点,也希望大家能评论区交流一起学习进步。如果我的文章有错别字,不通顺的,或者代码、注释、有错漏的地方,同学们都可以指出修正。

如果感觉本文对你有一点的启发和帮助,还望你能点赞支持一下,你的支持对我真的很重要。

Ok,这一期就此完结。

【Flutter】版本迭代这么快,Flutter 3.24 冲不冲?先踩为敬!Fultter 的版本更新一直都是比较快的

转载自:https://juejin.cn/post/7410599171122839591
评论
请登录