Dart 语法
1. 级联操作符 …
var paint =Paint()..color = Colors.black..strokeCap = StrokeCap.round..strokeWidth = 5.0;
2. firstWhereOrNull
3. 隐藏或导入部分组件
// Import only foo.
import 'package:lib1/lib1.dart' show foo;// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
3. 单个 Case 模式 可以实现相同的验证。 单个 case 最适合作为 if-case 语句。模式提供了一种更具声明性且不那么冗长的 JSON 验证方法:
if (data case {'user': [String name, int age]}) {print('User $name is $age years old.');
}
data case {‘user’: [String name, int age]}:这是一个模式匹配表达式。
data 是要匹配的对象。
case 关键字用于指定模式。
{‘user’: [String name, int age]} 是一个模式,表示 data 必须是一个 Map,并且包含一个键为 ‘user’ 的条目,其值是一个包含两个元素的列表,第一个元素是 String 类型,第二个元素是 int 类型。
String name 和 int age 是变量声明,用于捕获匹配到的值。
如果 data 符合这个模式,name 和 age 会被赋值为对应的值,并且 if 块中的代码会被执行。
参考链接:https://dart.cn/language/patterns/
4. 函数 Tear-off
void printCharCode(int code) {print(String.fromCharCode(code));
}void main() {var charCodes = [68, 97, 114, 116];// 函数 Tear-offcharCodes.forEach(printCharCode);
}
在这个例子中,printCharCode 是一个函数。通过 charCodes.forEach(printCharCode),我们直接将 printCharCode 传递给 forEach,而不需要写成 charCodes.forEach((code) => printCharCode(code))。
5. 生成器
yield:用于在生成器函数中逐个返回值。
yield*:用于委托生成器的执行,避免嵌套调用的开销。
同步生成器:返回一个 Iterable 对象,使用 sync* 标记。
异步生成器:返回一个 Stream 对象,使用 async* 标记。