当前位置: 首页 > news >正文

flutter项目迁移空安全

  1. 重中之重
    备份好项目文件,甚至连已经加载好的flutter库也可以备份。
  2. 环境包升级
    2.1
    不要直接换成flutter:3.0以上的版本,这样做既有基本的库兼容问题,又有空安全下的语法问题(整个项目中需要增加 late、?、!的语法错误,一片报错的红海/(ㄒoㄒ)/ )
    2.2
    将环境包升级到flutter:2.10.5,它是flutter:3.x前的最后一个版本。
    Flutter SDK下载地址:https://docs.flutter.dev/install/archive#windows
    pubspec.yaml中配置dart sdk版本限制:sdk: ‘>=2.10.0 <3.0.0’(不能直接配置>=2.12.0,2.12.0以上强制使用空安全语法)

environment:
sdk: ‘>=2.10.0 < 3.0.0’

  1. 解决由于更换环境后出现的库版本不兼容问题
    3.1
    手动修改太麻烦时,可以运行命令行:dart fix --apply。它能自动修复Dart代码过时的方法调用、格式问题、或可被自动修正的小错误,但并不是全部。

  2. 进行空安全迁移前的准备(项目已经在flutter:2.10.5环境顺利运行)
    4.1
    检查项目中依赖库是否支持空安全。运行命令:

dart pub outdated --mode=null-safety

未全部支持空安全会打印出哪些库未支持,
第三列绿色是足够支持空安全的版本,
第四列绿色是库当前的最新版本它的环境可能是3.x。
将对应库版本改为足够支持空安全的版本就好。(不用命令行dart pub upgrade为了避免升级到最新版本)
在这里插入图片描述
4.2
修复更改版本后的库调用问题(dart fix --apply可以用起来),保证项目能正常运行起来。
4.3
再次运行dart pub outdated --mode=null-safety检查,此时项目已经完全支持空安全了
在这里插入图片描述

  1. 开始空安全迁移
    5.1
    当第三方库不能完全支持空安全时有命令行(这样的操作常常会不完整或是迁移失败)

dart migrate --skip-import-check //跳过依赖的三方库是否支持空安全
–skip-import-check --ignore-exceptions //跳过依赖的三方库是否支持空安全且忽略异常情况

所以项目完全支持空安全的情况下应该直接迁移,运行命令:

dart migrate

顺利执行命令后会打印提供的迁移工具链接,在浏览器中打开。
在这里插入图片描述
点击按钮APPLY MIGRATION应用迁移到项目中,等待迁移执行完成(对于文件太多的项目手动迁移不可取)
当执行完成后,在Android Studiio代码被自动更改。打开pubspec.yaml会看到SDK版本限制被改为了>=2.12.0

environment:
sdk: ‘>=2.12.0 < 3.0.0’

5.2
但项目中会有迁移工具无法修复的报错。
一般都是空条件判断的报错,一条条修复。(比起整个项目都报红好太多!)
报错代码示例:

int? _goodsQuantity;
if(condition == 1){_goodsQuantity += 1; //这句会报错_goodsQuantity  = (_goodsQuantity ?? 0) + 1; //改成这样
}

当所有报错解决项目能正常运行起来了,空安全迁移就完成了。

6.页面报错的修复
虽然空安全语法正确了项目跑起来了,但是在数据处理上不可避免的会出现逻辑上的空判断冲突,此时有问题的页面就会报错。
需要把各个页面点一点,耐心的走一遍整个app,修复这些bug。
一般是类型不匹配报错,示例:

type ‘() => Null’ is not a subtype of type ‘(() => Future)?’ in type cast
type ‘String’ is not a subtype of type ‘String?’ in type cast

解决空安全后,再去升级flutter3.x版本会更方便。

相关文章:

  • 欧盟MID认证,助力全球新能源高效计量与管理
  • Seata 面试题解析
  • 软考 系统架构设计师之考试感悟3
  • ubuntu 安装上传的 ffmpeg_7.1.1.orig.tar.xz并使用
  • 深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略
  • 动态规划-931.下降路径最小和-力扣(LeetCode)
  • 高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例
  • 制造企业生产数据分析全解析:5大类数据定义、分析方法与落地指南
  • 阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境
  • 制造企业搭建AI智能生产线怎么部署?
  • C++:栈帧、命名空间、引用
  • 人工智能浪潮下,制造企业如何借力DeepSeek实现数字化转型?
  • 学习黑客小故事理解 Metasploit 的 Meterpreter
  • 酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法
  • NUMA 架构科普:双路 CPU 系统是如何构建的?
  • 如何给老旧 iOS App 添加安全保护?用 Ipa Guard 对 IPA 文件混淆加固实录
  • ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战
  • WebVm:无需安装,一款可以在浏览器运行的 Linux 来了
  • 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt
  • SpringBoot(五)--- 异常处理、JWT令牌、拦截技术
  • 武汉免费网站建设/网站优化排名方案
  • 鸿鹄网站建设/惠州seo排名优化
  • wordpress 帝国cms速度/海南seo
  • 儿童网站源码/淘宝关键词排名查询
  • 网站建设开发的主要流程/黄山网站建设
  • 成都旅游的网站建设/迅雷磁力链bt磁力种子