# 其他
# 泛型
泛型的好处是正确指定泛型可以提高代码质量,减少重复的代码 运行时中的泛型集合,Dart中泛型类型是固化的,即它们在运行时是携带类型信息的.
var list = List<int>();
list.addAll([2,3]);
assert(list is List<int>);
# 库
库不仅提供API,还封装代码,下划线(_)开头的标识符只能在库中可见,库可通过包来分发
# 引用库
引用内置库
import 'dart:html';
引用其他库
import 'package:pages/index.dart';
# 指定库前缀
如果导入两个存在冲突标识符的库,可为其制定库前缀
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
Element ele1 = Element(); // 使用 lib1 中的 Element。
lib2.Element ele2 = lib2.Element(); // 使用 lib2 中的 Element。
# 导入部分库
只导入fn
import 'package:pages/index.dart' show fn;
除了fn都导入
import 'package:pages/index.dart' hide fn;
# 延迟加载
在需要库的时候再加载
import 'package:pages/index.dart' deferred as lib1;
当需要使用的时候
Future getLib() async {
await lib1.loadLibrary();
lib1.fn();
}
一个库可以多次调用loadLibrary
,但只会载入一次
# 异步编程
Future getLib() async {
await lib1.loadLibrary();
lib1.fn();
}
其中async
表明这是一个异步函数,await
等待其完成后,再执行下面的lib1.fn(),这看起来很像同步代码
假如我们要在主函数main中使用await,那么main()的函数体就必须被标记
Future main() async {
await xx();
}
在一个异步函数中可以使用多个await
在await表达式中,其值通常是一个Future
对象,有点类似于JS中的Promise
# 声明异步函数
同步写法
String fn() => 'zhangsan';
异步写法
Future<String> fn() async => 'zhangsan';
若函数没有返回值,则返回类型声明为Future<void>
# typedef
因为在Dart中一切皆对象,函数也是,我们可以使用typedef为函数起一个别名,用来声明字段及返回值类型 未使用typedef
void main(){
Test t = Test(foo);
print(t.fn is Function);
}
class Test {
Function fn;
Test(bool f(String a, int b)){
fn = f;
}
}
bool foo(String a, int b) => true;
上面的代码在将f赋值给fn时,类型信息就丢失了,但是如果我们使用显式的名字保留类型信息,这样开发者和工具都可以使用它们.
使用typedef
void main(){
var t = new Test(foo);
print(t.fn is Function);
print(t.fn is Fn);
}
typedef Fn = bool Function(String a, int b);
class Test {
Fn fn;
Test(this.fn);
}
bool foo(String a, int b) => true;
# 元数据
元数据注释以@开头,Dart中有两种可用注解: @deprecated
和 @override
下面是@deprecated
的用法
void main(){
var t = new Test();
t.oldFn(); // 在vscode中,这里会有一条删除线提示我们这个方法是不推荐使用的,但它仍是能够执行的
t.newFn();
}
class Test {
void oldFn(){
newFn();
}
newFn(){
print(1);
}
}
# 注释
# 普通注释
单行注释
// print(1);
多行注释
/*
print(1);
print(1);
*/
# 文档注释
单行注释
/// 继承自[Test2]
多行注释
/**
* 继承自[Test2]
* 有个参数
**/
[Test2]
会成为一个链接,指向Test2类的API文档
← 类