泛型
对于 List 或 Set 只需要在声明语句前加 前缀, 对于 Map 只需要在声明语句前加 <keyType, valueType> 前缀
var names = <String>['Seth', 'Kathy', 'Lars'];//list类型
var uniqueNames = <String>{'Seth', 'Kathy', 'Lars'};//set类型
var pages = <String, String>{//map类型
'index.html': 'Homepage',
'robots.txt': 'Hints for web robots',
'humans.txt': 'We are people, not machines'
};
库和可见性
以下划线 (_) 开头的标识符仅在库内可见。如果导入两个存在冲突标识符的库, 则可以为这两个库或者其中一个指定前缀。 例如,如果 library1 和 library2 都有一个 Element 类, 那么可以通过下面的方式处理:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// 使用 lib1 中的 Element。
Element element1 = Element();
// 使用 lib2 中的 Element。
lib2.Element element2 = lib2.Element();
如果只使用库的一部分功能,可以选择需要导入的内容
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
延迟加载库
要延迟加载一个库,需要先使用 deferred as 来导入:
import 'package:greetings/hello.dart' deferred as hello;
当需要使用的时候,使用库标识符调用 loadLibrary() 函数来加载库:
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
Dart 隐含的把 loadLibrary() 函数导入到使用 deferred as 的命名空间 中。 loadLibrary() 方法返回一个 Future。