#挑战30天在头条写日记#
2023年5月10日 发布 Dart 3.0版本。
要使用Dart3的新特性,你必须将语言版本更新到3.0。这样可以同时获得Dart3版本化的更改。
environment: sdk: '>=3.0.0 <4.0.0'
本节列出了从2023年1月26日到2023年5月10日的显著变化。
在Dart 2.12中,用户需要通过pubspec设置来启用空值安全性。而在Dart 3中,空值安全性已经内置;开发者无法关闭它。",所以 没有支持空安全的包在解决依赖关系时会引发问题。
dart pub getBecause pkg1 doesn't support null safety, version solving failed.=2.9.0 <3.0.0'" must be 2.12.0 or higher to enable null safety.
使用语言版本注释退出null安全的库选择2.12以下的任何语言版本将导致分析或编译错误:
dart analyze .Analyzing .... 0.6s=2.12.0. Try removing the language version override and migrating the code. • illegal_language_version_override
dart run bin/my_app.dart../pkg1/lib/pkg1.dart:1:1: Error: Library doesn't support null safety.// @dart=2.9^^^^^^^^^^^^
所以 在开始迁移到Dart 3之前,开发者需要确保应用程序或包已100%迁移到启用null安全。这需要Dart 2.19 SDK,而不是Dart 3 SDK。要了解如何首先迁移应用或包以支持null安全,请查看null安全迁移指南。
由于历史原因,命名可选参数可以使用:或=指定其默认值。在Dart3中,只允许使用=语法。执行 dart analyze 分析,会抛出异常:
line 2 • Using a colon as a separator before a default value is no longer supported.
比如原来的写法
int someInt({int x: 0}) => x;
dart3之后只允许
int someInt({int x = 0}) => x;
开发者可以通过 dart fix 命令来自动进行转换
dart fix --apply --code=obsolete_colon_for_default_value
只要它没有声明的构造函数,并且除了Object之外没有父类。(这个作者还没去使用验证,也不知如何去具体使用)
test(List<int> list) { switch (list) { case [1, 2]: print('Matched'); break; default: print('Did not match'); break; }}main() { test(const [1, 2]); // Prints "Matched". test([1, 2]); // Prints "Did not match".}
The label used in a 'continue' statement must be defined on either a loop or a switch member.
以下null安全迁移命令已被删除,因为Dart 3不支持没有null安全的代码:
dart migratedart pub upgrade --null-safetydart pub outdated --mode=null-safety
当然还移除了不少的 api ,这个在后续的文章中罗列说明 。