flutter项目迁移空安全

article/2025/8/22 10:32:57
  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版本会更方便。


http://www.hkcw.cn/article/RZVmEOktmK.shtml

相关文章

单亲妈妈抗癌6年去世 生命旅程的坚韧与无奈

单亲妈妈抗癌6年去世 生命旅程的坚韧与无奈!5月28日晚,浙江的单亲妈妈张潇群因结肠癌去世,年仅37岁。她在网络上是一位知名的抗癌博主,无数人关注着她的抗癌历程,从确诊到治疗的过程充满艰辛。浏览她的社交媒体,仿佛走进了一场关于疼痛的独白,无论是病痛的呻吟还是求生的…

深入理解C#泛型:提升代码复用与类型安全的利器

在现代软件开发中&#xff0c;编写灵活、可重用且类型安全的代码是每个开发者的追求。C#作为一种强类型语言&#xff0c;通过引入泛型(Generics)特性&#xff0c;完美地解决了代码重用与类型安全之间的矛盾。本文将全面探讨C#泛型的核心概念、实现原理、高级特性以及最佳实践&a…

Deepseek升级 低调发布性能提升

5月28日晚,DeepSeek在官方交流群中宣布R1模型已完成小版本试升级。今年3月,DeepSeek对V3模型进行小版本升级时也采用了同样的方式,先通过官方交流群宣布,随后才公布具体更新内容。本次试升级,DeepSeek依旧保持低调,没有发布详细的技术说明文档或举行发布活动。然而,据用…

AET3156AP电源方案 禾纳代理商

特性VDs-30V,ID-28ARDS(ON)13.5mOM(TYR.)VGS-10V&#xff0c;Ib-6ARDS(ON)18mOM(TYR.)VGS-4.5V&#xff0c;IB-5A可靠且坚固雪

学生管理系统V2.0

学生管理系统V2.0 需求: 要求实现一个基于指针的学生成绩管理系统&#xff0c;具体功能如下: 添加学生信息&#xff1a;输入学号和三门成绩&#xff0c;存储到数组中。显示所有学生信息&#xff1a;遍历数组&#xff0c;输出每个学生的学号和成绩。计算每个学生的平均分和总分&…

从汇编的角度揭秘C++函数重载,原来这么简单

函数重载是指在同一个作用域内&#xff0c;有多个同名函数&#xff0c;但是它们的形参列表不同。在调用时&#xff0c;根据不同的实参&#xff0c;调用相应的函数。函数重载是一种静态多态形式。我们先来看一个函数重载的例子&#xff0c;然后分析其背后的原理。请看下面这段代…

Sigma-Aldrich胰蛋白酶细胞解离方案速览

Sigma-Aldrich_胰蛋白酶用于细胞培养 细胞解离是细胞传代过程中的一个步骤&#xff0c;即细胞从预处理表面分离&#xff0c;形成悬浮液。这些悬浮液对于传代培养重新接种、细胞计数分析和细胞增殖非常重要。有多种蛋白水解酶可用来从粘附基质上脱离细胞&#xff0c;胰蛋白酶就…

金正恩:炮兵部队随时能战且战之必胜!

金正恩:炮兵部队随时能战且战之必胜!据朝中社报道,朝鲜人民军大联合部队炮兵部队于29日进行了火炮射击比赛,朝鲜劳动党总书记、国务委员长金正恩亲临现场观摩。金正恩对比赛成果予以高度评价,他指出,参赛炮兵部队充分展现了炮兵武装力量的实战能力,时刻保持着万全的临战…

保健品,为何总在“围猎”老年人?

近日,市场监管总局在全国部署开展老年人药品、保健品虚假宣传专项整治工作,打击药品、保健品市场“坑老”“骗老”行为。各地市场监管部门将聚焦老年人药品、保健品领域,依法查处虚假宣传、价格欺诈、违法广告、非法添加等侵害老年人合法权益、破坏市场竞争秩序的行为。同时…

立志成为一名优秀测试开发工程师(第八天)——jemeter的学习

jemeter的学习 目录 一、jemeter常见元件的认识 二、jemeter手动设计脚本 三、jemeter工具录制脚本 一、jemeter常见元件的认识 ①测试计划&#xff1a;所有元件的父级文件&#xff08;容器&#xff09;&#xff0c;在所有元件的最顶层 其他元件都是基于测试计划来组织的…

如何使删除的数据不可恢复?

一些无用的数据包含我们计算机上的重要信息。如果你想让这些数据彻底不可恢复&#xff0c;你需要了解必要的数据擦除方法和一些有用的技巧。继续阅读并轻松获得解决方案。 第 1 部分&#xff1a;我可以使已删除的数据不可恢复吗&#xff1f; 是的&#xff0c;完全有可能使已删…

35岁小伙不结婚 爆改山洞隐居4年:美色不值得浪费时间金钱!

35岁小伙不结婚爆改山洞隐居4年。近日,一35岁小伙爆改山洞隐居4年引发网友热议,采访中他表示美色不值得自己浪费时间金钱,成本太高了。叫世外桃源也不为过,山洞门前有小河,门口可以种菜,而山洞用红砖建造,也非常现代化,有电脑和家具一应俱全的,书房是自己空间!建造一…

【Git】View Submitted Updates——diff、show、log

在 Git 中查看更新的内容&#xff08;即工作区、暂存区或提交之间的差异&#xff09;是日常开发中的常见操作。以下是常用的命令和场景说明&#xff1a; 文章目录 1、查看工作区与暂存区的差异2、查看提交历史中的差异3、查看工作区与最新提交的差异4、查看两个提交之间的差异5…

连接远程桌面计算机提示:“这可能是由于CredSSP加密数据库修正” 问题解决方案

连接远程计算机提示&#xff1a;“这可能是由于CredSSP加密数据库修正” 问题解决方案 1.连接远程计算机提示&#xff1a;“这可能是由于CredSSP加密数据库修正” 问题 2. win R,输入gpedit.msc&#xff0c;打开本地组策略编辑器 2.1 操作步骤&#xff1a;计算机配置–>系…

切片器导航-大量报告页查看的更好方式

切片器导航-大量报告页查看的更好方式 现在很多报告使用的是按钮导航&#xff0c;即使用书签按钮来制作页面导航的方式。但是当我们的报告有几十页甚至上百页的时候&#xff0c;使用书签按钮来制作页面导航&#xff0c;无论是对于报表制作者还是报告使用者来说都是一种很繁琐的…

AI智能体|扣子(Coze)搭建【自动生成超高质量PPT】工作流

各位好久不见&#xff0c;你的失踪人口又回来了&#xff0c;已经超过一周的时间没有进行文章的更新了。 没更新的这段时间&#xff0c;主要还是因为工作上的调整以及身体生病所导致的停更&#xff0c;具体以后再说。 我们先讲今天的主要主题&#xff0c;使用 Coze 智能体一键生…

day39python打卡

知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容即可 一、 图像数据的介绍 1.1 灰度图像 从这里开…

Azure Devops pipeline 技巧和最佳实践

1. 如何显示release pipeline ? 解决方法: 登录devops, 找到organization - pipeline - setting下的Disable creation of classic release pipelines,禁用该选项。 然后在project - pipeline - setting,禁用Disable creation of classic release pipelines 现在可以看到r…

艺人李嘉琦回母校重庆大学开讲座 分享追梦历程

5月29日,演员李嘉琦回到母校重庆大学,参加新闻学院“优秀校友回母校”系列讲座。她以“梦想?梦幻?人生也是一部电视剧”为主题,与学弟学妹们分享了自己在母校时的学习生活和进入娱乐圈的奋斗经历。李嘉琦从小就有当演员的梦想,但不知道如何实现。高考时,她从内蒙古考入重…

定位例子(vue3)

定位 https://juejin.cn/post/7398348521135767567 一固定定位 1.1 固定定位是相对于根元素的&#xff0c;或说固定在浏览器视窗。