Skip to content
Dart

Futures и Streams

Работа с одиночными и множественными асинхронными значениями.

#future#stream#async

Code

dart
// Future: single async value
Future<int> fetchCount() async {
  await Future.delayed(Duration(milliseconds: 500));
  return 42;
}

// Stream: multiple async values
Stream<int> countDown(int from) async* {
  for (var i = from; i >= 0; i--) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}

void main() async {
  // Future
  final count = await fetchCount();
  print('Count: $count');

  // Stream: await for
  await for (final n in countDown(3)) {
    print(n);  // 3, 2, 1, 0
  }

  // Stream: listen
  final sub = countDown(5).listen(
    (n) => print('Tick: $n'),
    onDone: () => print('Done'),
    onError: (e) => print('Error: $e'),
  );

  // Cancel subscription
  await Future.delayed(Duration(seconds: 2));
  await sub.cancel();

  // Stream transformations
  final doubled = countDown(3).map((n) => n * 2);
  await for (final n in doubled) print(n);
}