Flutter 中的空安全
自 Flutter 2 起,Flutter 开始支持空安全。你可以将你的 Flutter package 代码迁移,以使用非空类型,如下所示:
class MyApp extends StatelessWidget {
const MyApp({super.key});
final int anInt = 3; // Cannot be null.
final int? aNullableInt = null; // Can be null.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Nullable Fields Demo',
home: Scaffold(
appBar: AppBar(
title: const Text('Nullable Fields Demo'),
),
body: Center(
child: Column(
children: [
Text('anInt is $anInt.'),
Text('aNullableInt is $aNullableInt.'),
],
),
),
),
);
}
}
你可以观看由讲师带来的免费学习工坊的视频:
资源
你可以阅读以下内容,进一步学习空安全:
如果你即将开始迁移你的 package 至空安全,你可以阅读以下内容:
已知的问题
Flutter SDK 中的部分内容尚未支持空安全,它们仍然需要一些 迁移至空安全 的额外工作。
We’re currently aware of the following issues: 目前我们已经明确了以下的问题:
-
pub.dev 上 Flutter 团队的 packages 正在进行迁移。你可以查看 已迁移的 packages 列表。我们的计划是在未来几周将主要的 packages 迁移完成,唯一遗留的例外是
integration_tests
,该 package 已被废弃,取而代之的是 Flutter SDK 本身的工具(见下文)。部分在 https://github.com/flutter/packages/tree/master/packages 的 package 可能需要更长的时间进行迁移。 -
使用
flutter_driver
以及 Flutter SDK 中对应版本的integration_test
进行集成测试。-
目前这些测试的方式,均未支持以空安全的方式在测试环境上运行。你可以运行空安全的应用,但测试本身不会使用 Dart 的空安全。
-
当你的项目依赖
flutter_driver
和integration_test
时,你可能无法升级args
、archive
和crypto
至已经迁移为空安全的版本,因为它们本身已经依赖了非空安全的版本(将导致版本冲突)。
我们计划在 2021 年上半年解决该问题。
-
如果你对还未合并到 beta 和 stable 渠道的新改动感兴趣,并且愿意走在开发的前沿,可以考虑使用 dev 渠道 (flutter channel dev
)。