迁移

你的代码里大部分需要更改的代码,都是可以轻易推导的。例如,如果一个变量可以为空,它的类型需要 ? 后缀。一个不可以为空的命名参数,需要使用 required 标记。

针对迁移,你有两个选项可以选择:

  • 使用迁移工具,它可以帮你处理大多数可推导的变更。
  • 自己动手,丰衣足食。

使用迁移工具

迁移工具会带上一个非空安全的 package ,将它转换至空安全。你可以先在代码中添加 提示标记

开始转换前,请做好如下的准备:

  • 使用最新的 Dart SDK 稳定版本。
  • 运行 dart pub outdated --mode=null-safety 以确保所有依赖为最新且空安全。

在包含 pubspec.yaml 的目录下,执行 dart migrate 命令,启动迁移工具。

dart migrate

如果你的 package 可以进行迁移,工具会输出类似以下的内容:

使用 Chrome 浏览器访问 URL,你可以看到一个交互式的界面,引导你进行迁移:

理解迁移的结果

若要了解每个变化(或者未变化)的原因,点击 Proposed Edits 窗口中的行数,原因会出现在 Edit Details 窗口中。

点击 line 3 链接,你可以看到迁移工具添加 ! 的原因。而因为你知道 zero 不会为空,所以你可以改进迁移结果。

改进迁移的结果

当分析结果推导了错误的可空性时,你可以添加临时的提示标记来改变建议的编辑:

  • 在迁移工具的 Edit Details 窗格中,你可以通过 Add /\*?\*/ hintAdd /\*!\*/ hint 按钮来添加提示标记。

    按下这些按钮,相应的标记会立刻添加到代码中,并且 无法撤销。如果你想删除标记,可以和平常一样使用代码编辑器删除它。

  • 就算迁移工具正在运行,你也可以使用编辑器添加提示标记。由于你的代码还未迁移到空安全,所以无法使用空安全的新特性。但是你可以进行与空安全无关的改动,例如重构。

    当你完成编辑后,点击 Rerun from sources 进行更改。

只迁移部分文件

尽管我们希望你能一次性完成迁移工作,但对于大体量的应用或 package 而言并不是简单的事。如果你想只迁移部分文件,请将暂时不迁移的文件前方的绿色勾选框取消勾选。

手动迁移

如果你不想使用迁移工具,你也可以手动进行迁移。

我们推荐你 优先迁移最下层的库 —— 指的是没有导入其他 package 的库。接着迁移直接依赖了下层库的依赖库。最后再迁移依赖项最多的库。

举个例子,假设你的 lib/src/util.dart 导入了其他(空安全)的 package 和核心库,但它没有包含任何 import '<本地路径>' 的引用。那么你应当优先考虑迁移 util.dart,然后迁移依赖了 util.dart 的文件。如果有一些循环引用的库(例如 A 引用了 B,B 引用了 C,C 引用了 A),建议同时对它们进行迁移。

手动对 package 进行迁移时,请参考以下步骤:

  1. 编辑 package 的 pubspec.yaml 文件,将最低 SDK 版本设置到至少为 2.12.0

    environment:sdk: '>=2.12.0 <3.0.0'
    
  2. 重新生成 package 的配置文件:

    $ dart pub get
    

    在版本最低是 2.12.0 的 SDK 上运行 dart pub get 时,会将每个 package 的默认 SDK 最低版本设定为 2.12,并且默认它们已经迁移至空安全。

  3. 在你的 IDE 上打开package 。
    你也许会看到很多错误,没关系,让我们继续。

  4. 利用分析器来辨析静态错误,逐个迁移 Dart 文件。
    按需添加 ?!required 以及 late 来消除静态错误。

分析

更新你的 package(在 IDE 或命令行工具中使用 dart pub get)后在 IDE 或命令行工具中对你的代码进行 静态分析:

$ dart pub get
$ dart analyze     # or `flutter analyze`

测试

如果你的代码通过了分析,接下来可以开始测试:

$ dart test       # or `flutter test`

你可能需要更新使用了空值作为预期用例的测试代码。

如果你需要对代码作出大量的更改,那么你可能需要重新对代码进行迁移。这时请先回滚代码更改,再运行迁移工具进行迁移。

flutter项目迁移空安全相关推荐

  1. flutter和webapp_Flutter全平台!迁移现有Flutter项目到WEB端

    写在前面 Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台.高保真.高性能.开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS .Android.web和桌面 ...

  2. flutter项目打包.exe文件发布windows版

    目录 发布windows版 1.为现有的 Flutter 应用程序添加桌面支持 2..创建main_desktop.dart文件 3.hover安装和环境配置 4.初始化,并打包 坑1 发布windo ...

  3. 废弃fastjson!大型项目迁移Gson保姆级实战

    前言 本篇文章是我这一个多月来帮助组内废弃fastjson框架的总结,我们将大部分Java仓库从fastjson迁移至了Gson. 这么做的主要的原因是公司受够了fastjson频繁的安全漏洞问题,每 ...

  4. 1.uap项目迁移到idea开发的详细教程(第壹篇)

    前言 第壹篇主要是快速入门上手为主,后面会逐渐的详细讲解sg-uap和osgi的关系,以及osgi在idea里面的使用 会有大量的截图,截图与文字相结合一起描述迁移项目的过程 大体步骤: 迁移的整体思 ...

  5. Flutter 项目实战(Dio+MVP+FutureBuilder )五

    / 没有感情万千 .只有默默无闻 / 2022年跨年了,又涨了一岁.随着时光的流逝,工作多年的我还是在坚持些代码.互联网都有所谓的大龄危机,我对此毫无畏惧.不要因为社会存在一些大龄危机的恐慌,产生了很 ...

  6. Flutter入门——创建第一个Flutter项目

    Flutter入门--创建第一个Flutter项目 一.创建项目 第一个项目使用Android Studio创建,步骤如下: 先打开Android Studio,会有一个创建新的Flutter应用的选 ...

  7. Flutter项目快速搭建指南

    本文字数:8683字 预计阅读时间:30 分钟 前言: 笔者在这之前已经有一年时间没有接触过flutter项目的开发了,目前由于新项目的需要,要重新开始搭建一个flutter项目.让我感到惊讶的是,f ...

  8. Android Studio创建第一个Flutter项目

    一.创建Flutter项目 1.1 file->New–>New Flutter Project 1.2 配置Flutter SDK Path 1.3 填写项目相关信息 二.android ...

  9. Flutter项目实战之女装商城------火爆专区实现、商品分类数据准备

    火爆专区实现: 继续Flutter项目的学习,在上一次https://www.cnblogs.com/webor2006/p/14410445.html咱们已经对于首页的大部分功能已经完成,但是呢,还 ...

最新文章

  1. Xamarin Android SDK无法更新的解决办法
  2. bootstarp table
  3. c# asp.net mvc 开发的正方教务助手(一)
  4. 单词的理解 —— 词义的变化(翻译)
  5. Docker Centos安装 Openssh
  6. 如何创建从硬盘安装的硬像文件
  7. 循序渐进的手动安装k8s笔记-1
  8. CSR8615蓝牙芯片功能调试入门笔记------ 下
  9. C#简单游戏外挂制作(以Warcraft Ⅲ为例)
  10. win10系统cpu内核或逻辑核心缺少缺少,解决办法
  11. 老王的JAVA基础课:第1课 计算机基础知识
  12. 第五章:3ds max UV展开和BP贴图绘制(下)
  13. 苹果7系统更新后信号无服务器,最全iPhone7手机无服务故障解决办法分享,成功拯救苹果7无信号...
  14. MySQL常见命令及基本查询
  15. SOCKET链接速度慢
  16. 史上最详细!嵌入式系统知识和接口技术总结
  17. zynq系列之-----PS端iic使用
  18. 2D激光SLAM::AMCL发布的odom----map坐标TF变换解读
  19. MFC将窗口的关闭键(叉叉)变为不可用/可用
  20. 【学习打卡】GradCAM可解释性分析

热门文章

  1. php实现队列上传,php实现队列
  2. java calendar类_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  3. 台式电脑没鼠标怎么移动光标_零基础学电脑从入门到精通 电脑零距离
  4. public 函数_Chapter18:友元函数和友元类
  5. java用jsoup爬网页数据_java使用jsoup爬取网页数据
  6. vue面向切面_vue:在路由跳转中使用拦截器
  7. vmdk文件怎么安装到虚拟机_【技术分享】虚拟机镜像解析
  8. gitlab 更新文件_GitLab任意文件读取漏洞公告
  9. python wmi antivirusproduct_Python中的WMI查询问题
  10. 1个系统节拍 c语言_自己写的非抢占式嵌入式操作系统ATOS,全c语言,移植太......