Dart入门系列:
Flutter开发Dart极速入门 (基本类型)
Flutter开发Dart极速入门 (变量)
Flutter开发Dart极速入门 (函数)
Flutter开发Dart极速入门 (操作符与流程控制语句)
Flutter开发Dart极速入门 (异常)
Flutter开发Dart极速入门 (类和对象)
Flutter开发Dart极速入门 (泛型)
Flutter开发Dart极速入门 (异步详解)
Flutter开发Dart极速入门 (生成器)
Flutter开发Dart极速入门 (库的使用)
Flutter插件化开发注意事项(Packages与插件化开发)
Flutter在Android原生工程中的集成
生成器
同步生成器 sync*
void main() {
print('main start');
Iterator iterator = syncGenerator(5).iterator;
while (iterator.moveNext()) {
print(iterator.current);
}
print('main end');
}
// 同步生成器
Iterable<int> syncGenerator(int n) sync*{
print('start');
int i = n;
while(i > 0) {
print('generator: $i');
yield i-- ; // yield 产出结果
}
print('end');
}
异步生成器 async*
void main() {
print('main start');
StreamSubscription subscription = asyncGenerator(5).listen(null);
subscription.onData((handleData) {
print(handleData);
if (handleData > 1) { // 异步生成器可以被中断
subscription.pause();
}
});
// StreamSubscription subscription = asyncGenerator(5).listen((value) {
// print('sub $value');
// });
print('main end');
}
// 异步生成器
Stream<int> asyncGenerator(int n) async*{
print('start');
int i = 0;
while(i < n){
print('generator: $i');
yield i++; // yield 产出结果
}
print('end');
}
yield 与 yield*
- yield 直接输出结果
- yield* 输出一个函数指针, 也就是说实际将会执行yield* 所表示的函数
递归生成器
void main() {
print('main start');
// 递归生成器
Iterator iterator = getSyncRecursiveGenerator(5).iterator;
while (iterator.moveNext()){
print(iterator.current);
}
print('main end');
}
// 递归生成器
Iterable<int> getSyncRecursiveGenerator(int n) sync* {
if (n > 0) {
yield n; // yield 产出结果
yield* getSyncRecursiveGenerator(n - 1); // yield* 调用函数
}
}