升级版本为 flutter 2.2.1
mac多版本flutter共存可以安装fvm工具
安装和使用细节可以查看https://juejin.cn/post/6948266183397212174
windows的话有类似的fvm工具
由于flutter2.0 默认开启了空安全,所以迁移都是围绕代码的空安全开始,pubspec.yaml中修改下dart版本号
空安全参考文档:
https://juejin.cn/post/6958965184631144478快速上手 Flutter 空安全
迁移升级流程
1.升级pubspec.yaml中使用到的插件,更新至支持空安全版本,本地维护的插件先备份,再升级,待升级完成后,同步本地插件的修改或者查看之前修改内容在最新版本插件是否已修复,对于不再维护的插件,如果是简单插件再引入本地,进行空安全修改,复杂插件需求替代插件 (待项目运行成功后对备份的插件进行进行同步)
dart pub outdated --mode=null-safety //检查插件空安全支持情况
2.api修改,flutter2.0属于大版本更新,有些widget的api有所有修改需要进行对应的修改
3.之前自动生成的model文件都要加上空安全,然后重新使用build_runner生成model文件
4.开始迁移控制台运行 dart migrate命令,顺利的话会启动一个内网服务器可以在上面,或者一堆报错对应文件进行修改
迁移注意事项:
在声明或者使用变量时,如果不能保证非空,不要使用!取值,也不要使用非空变量,没有?的变量即为非空变量,编写空安全代码时,要清楚的变量是否非空或者是可空,在使用!强制非空时,先判断对象是否为null,使用?.调用方法,回调的话使用xx?.call(),使用??赋默认值,使用as转换响应类型
常见报错:
List() The default 'List' constructor isn't available when null safety is enabled 修改为<int>[] 或者 <int?>[]
Stack overflow已废除替换为clipBehavior
The argument type 'ModalRoute<Object?>?' can't be assigned to the parameter type 'PageRoute<dynamic>'. 使用as转换类型
routeObserver.subscribe(this, ModalRoute.of(context)as PageRoute);
网友评论