对Flutter和Dart的Null Safety支持
空值安全意味着一个变量不能有空值或无效值。这一特性通过减少错误和应用程序崩溃来提高用户满意度。
空值安全确保所有运行时的空值引用问题都在编译时显示出来。它可以帮助你在开发过程中避免许多问题,而不是等到运行时再去识别空值错误。
当涉及到类型安全时,Dart表现出色。
本文将介绍Flutter中null安全的实现。它还将讨论这个功能如何影响开发过程,以及它的好处。
本文还将向您展示如何在您的Flutter应用程序中加入null安全。
前提条件
在开始之前,读者应该具备。
- 对Dart编程语言有基本了解。
- 安装了Flutter SDK[2.0.0版本]。
- 安装了Dart SDK[2.12.0版本]。
- 安装了一个IDE。最好是[IntelliJ]。
空白安全的原则
不可归零
如果没有明确的可归零性声明,Dart编程语言中的变量不能为空。
可采用
迁移到null安全完全取决于您。你可以决定什么时候和什么东西转为null安全。同一个项目可以有空安全和非空安全的代码阶段。
完全健全
由于Dart的空安全特性,编译器优化是可行的。所有需要取值的变量都必须被适当地初始化。空值安全的其他好处包括更少的错误,更小的二进制文件和更快的执行。
什么是可归零和不可归零的类型?
不可归零的类型
当我们使用null safety时,所有的类型默认都是不可归零的。例如,一个int 变量必须有一个integer 值。
void main() {
int number;
number = 0;
}
如果一个变量是不可置空的,它必须总是被设置为一个非空值。
可归零类型
下面的操作符指定了一个变量是否可以为空。
可置空类型(?)
String? houseLocationName; // By default, it's set to null.
int? number = 36; // By default, it's set to non-null.
number = null; // It's possible to reassign it to null.
一个可置空的变量在使用前不需要被初始化。
断言运算符(!)
使用null断言运算符'!'可以让Dart将一个不为空的可空表达式视为不可空。然而,你必须确定没有给它分配任何值。
int? anyNumber = 50;
int data = anyNumber!; // Because the value is not nullable, this is valid
类型推广
Flow Analysis 是一种决定程序执行的算法。
Dart的分析器检查具有非空值的可空变量,并通知开发者可能的编译时问题。
int checkValue(int? anyNumber) {
if (anyNumber == null) {
return 0;
}
// here the value is not null.
return anyNumber.abs();
}
void main(){
print(checkValue(10));
print(checkValue(null));
}
这段代码决定了一个值是否为空。一个不可归零的值不能被归零。
所以,可以用anyNumber.abs() ,而不是anyNumber?.abs() 。abs() 函数产生的结果不是小数。
健全和不健全的空值安全
在Dart中使用空值安全的库和非空值安全的库是可能的。然而,在执行这些混合版本的时候,空值安全可能会受到影响。
在Dart中,空值安全是通过静态和运行时检查的组合来保证的。
通常对每个Dart库进行空值安全检查。即使在混合版本的程序中,如果有空值安全的库,也会出现错误。
一个混合版本的软件不可能像空安全的应用程序那样具有运行时的健全性。
请注意,在空安全代码中引入空变量可能导致错误。
空安全迁移在Flutter中是如何进行的
将一个包或应用程序迁移到null安全有[五个主要步骤]。
下面将讨论这些步骤。
1.确保所有的依赖关系都已准备好进行迁移
如果在迁移过程中你的任何依赖关系发生了变化,你可能需要在转移相应的代码后再做一次重定位迁移。
如果你的某些依赖项不是null safe,你可能需要联系软件包的开发者。
只有当一个应用程序将其依赖关系升级到路径和进程的预发布版本时,它才准备好进行迁移。
2.使用迁移工具进行迁移
幸运的是,迁移工具可以帮助你检查和确认可忽略的属性。
你可以添加无效性线索来改变一个设备的属性。然而,包括的一些迁移线索会对迁移质量产生很大的影响。
3.静态地分析你的迁移代码
你可以通过在终端执行pub get命令来更新你的软件包。
然后可以用下面的命令对你的Flutter和Dart代码进行静态评估。
$ flutter pub get
$ flutter analyze
$ dart pub get
$ dart analyze
4.验证测试是否通过
确保所有测试都通过。如果你更新了你的软件包代码,只接受非空变量,你可能需要重新运行测试。
5.应发布不含空值的软件包
一旦你的迁移完成并且所有的测试都通过了,你的预发布包就可以发布了。
作为一个预发布版本,你应该将包发布到pub.dev,这是一个公共仓库。
在Flutter中进行null-safety迁移的原因
在检查空安全时,您可以完全依靠编译器。这使得这个过程变得更加简单。
因此,采用null安全应该是强制性的。你在这项活动中投入的时间和精力将使你在未来免于挫折。
Dart是一种以开发者为中心的语言,这一特性再次证实了这一点。Flutter SDK中包含的null safety使创建应用程序变得更加容易。
总结
就类型安全而言,Dart是无可匹敌的。空值安全可以帮助您避免程序中的众多错误。
因此,您可以使用从这篇文章中获得的知识来制作高质量的Flutter应用程序。