Flutter 2 发布至今已经1个多月了,不知道小伙伴们都升级体验了没有。官方发布的Flutter 2 技术博文中详细介绍了Flutter 2 带来的更新,大体包括:
- 修复了大量bug
- Flutter web 达到稳定版
- Dart 更新到 2.12,引入空安全(Null Safety)
- iOS 新特性支持
- 大量新组件的加入
- 混合开发时,启动多个 Flutter 实例,内存占用减少 99% 👍
- 部分 Api 改动,包括方法或参数的废弃,参数增减等
很多三方库已经做了适配升级,后续的bug修复都会在新版本中升级,旧版本的 Flutter 无法使用。如果你的项目中的没有遇到三方库的bug,那么可以暂时保持观望,但还是应该尽快升级,后续的 Android、iOS 甚至是 Xcode 更新都有可能导致你的 App 不可用。
升级步骤
第一步当然是
$ flutter upgrade
但是别急,Flutter 2 要求项目中三方库适配 Null Safety,否则无法编译通过,所以首先使用如下命令
$ dart pub outdated --mode=null-safety
检查你的三方库是否支持 Null Safety,如下图所示
如果所有三方库的新版本都支持了 Null Safety,那么就可以放心升级 Flutter 版本了。剩下的步骤都在 Migrating to null safety 这篇文章中,大家可以自己去看。
以上是理想情况下的升级方法,现实是一些三方库维护速度很慢或者作者干脆弃坑了,而项目又不得不用,另外又有些库的 bug 困扰了我们很久,然后我们发现它在 Null Safety 的版本上修复了,这时我们只有硬着头皮上了。下面我们重点讨论这种情况。
第一步还是要升级 Flutter,然后把能升级的 package 全部升级了。
第二步把无法升级的 package 源码 clone 到项目中,记得删除 .git 目录。把引用方式改成源码引用,比如
# azlistview: ^1.1.1
azlistview:
path: ./azlistview
然后将终端命令位置移动到 package 目录中,运行
$ dart pub outdated --mode=null-safety
检查 package 项目的所有依赖都有对应的 Null Safety 版本,如果没有请重复第二步。升级完后运行
$ dart migrate
提示
View the migration suggestions by visiting:
http://127.0.0.1:60278/Users/you/project/mypkg.console-simple?authToken=Xfz0jvpyeMI%3D
浏览器打开链接,点击 APPLY MIGRATION。
对于自己创建的 package 或者 plugin,操作相同。
最后,将终端命令移到主项目根路径,运行
$ dart migrate
操作同上一步。
迁移命令执行完之后,并不代表完全 OK 了,我们还要把 Dart Analysis 提示的所有 error 全部解决
可以尝试使用
$ dart fix --apply
修复所有 Api 改动引起的错误,也可以用 IDE来修改。
整个过程可能要花很长时间,过于细小的修改就不赘述了,祝大家都升级成功!
参考文章
1. Announcing Flutter 2
2. What’s New in Flutter 2
3. Migrating to null safety