flutter项目迁移空安全

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

迁移

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


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


使用迁移工具,它可以帮你处理大多数可推导的变更。

自己动手,丰衣足食。

使用迁移工具

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


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


使用最新的 Dart SDK 稳定版本。

运行 dart pub outdated --mode=null-safety 以确保所有依赖为最新且空安全。

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

dart migrate

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


image.png


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

image.png

image.pngimage.png


理解迁移的结果

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


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


改进迁移的结果

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


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


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


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


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


只迁移部分文件

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


手动迁移

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


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


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


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


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

environment:
  sdk: '>=2.12.0 <3.0.0'

重新生成 package 的配置文件

$ dart pub get

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


在你的 IDE 上打开package 。

你也许会看到很多错误,没关系,让我们继续。


利用分析器来辨析静态错误,逐个迁移 Dart 文件。

按需添加 ?、!、required 以及 late 来消除静态错误。


分析

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

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

image.png

测试

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

$ dart test       # or `flutter test`

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

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

相关文章
|
6月前
|
设计模式 前端开发 测试技术
Flutter 项目架构技术指南
探讨Flutter项目代码组织架构的关键方面和建议。了解设计原则SOLID、Clean Architecture,以及架构模式MVC、MVP、MVVM,如何有机结合使用,打造优秀的应用架构。
171 1
Flutter 项目架构技术指南
|
2月前
|
Dart
如何在 Flutter 项目中使用 Dart 语言?
如何在 Flutter 项目中使用 Dart 语言?
132 58
|
1月前
|
Dart IDE 开发工具
鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙
本文介绍了将现有Flutter项目适配鸿蒙系统的步骤。首先,根据[鸿蒙Flutter适配指南]搭建开发环境,并使用fvm管理多版本SDK。项目采用模块化设计,包括apps、common、components、modules和plugins等目录,分别对应不同功能模块。重点在于在apps目录下创建新的鸿蒙项目,逐步添加依赖并解决版本兼容性问题。最后,通过配置pubspec.yaml文件和特定插件的鸿蒙化适配,完成项目的编译与运行测试。
103 0
|
3月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
328 4
|
3月前
|
Java Android开发
添加Flutter模块到已有项目(Android)
添加Flutter模块到已有项目(Android)
46 3
|
3月前
|
Dart 搜索推荐 IDE
打造个性化天气应用:从零开始的Flutter项目之旅
【8月更文挑战第31天】本文将引导读者通过Flutter框架创建一个简单的天气应用,涵盖从设置开发环境到实现基本功能的全过程。我们将探索如何使用Dart语言和Flutter SDK构建用户界面,并集成第三方API来获取实时天气数据。文章不仅提供代码示例,还将讨论如何进行调试和部署应用,确保读者能够理解并实践所学知识。
|
5月前
|
开发框架 Dart 开发工具
一个Android项目怎么判断是flutter
【6月更文挑战第6天】
115 2
|
4月前
|
Dart Android开发 iOS开发
flutter 创建项目、运行项目、项目目录
flutter 创建项目、运行项目、项目目录
184 0
|
测试技术 数据库 Android开发
Flutter系列文章-实战项目
在本篇文章中,我们通过一个简单的天气应用示例,综合运用了最近学到的知识,包括保存到数据库、进行 HTTP 请求等。通过这个实战项目,你可以更加深入地了解 Flutter 应用的开发流程,并掌握实际项目中的常用技术和最佳实践。
217 0
Flutter系列文章-实战项目
|
iOS开发 Perl
将Flutter引入到现有项目中(iOS+Flutter)
将Flutter引入到现有项目中(iOS+Flutter)
下一篇
无影云桌面