Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpSmLs 100 of 224 menu
◀ ▶

Подписка listen в Dart

Иногда удобнее не ждать циклом, а повесить обработчик на поток. Метод listen принимает функцию от элемента и возвращает StreamSubscription для управления подпиской.

Готовый поток из списка можно вывести так:

import 'dart:async'; void main() { Stream<int> nums = Stream.fromIterable([1, 2, 3]); nums.listen((int n) { print(n); }); }

Три числа печатаются по мере выдачи. Для одноразового потока одной подписки достаточно, пока программа не завершится.

Перед финальным приемом можно залогировать элемент, не меняя сами данные - второй listen на промежуточном шаге не нужен, достаточно вызова внутри первого обработчика или цепочки map:

import 'dart:async'; void main() { Stream<String> tokens = Stream.fromIterable(['alpha', 'beta']); tokens.listen((String token) { print('seen $token'); print('got $token'); }); }

Для каждого токена сначала строка "seen ...", затем "got ...". Порядок задает код внутри одной лямбды.

Несколько стадий наблюдения удобно строить операторами перед listen:

import 'dart:async'; void main() { Stream<int> stream = Stream.fromIterable([2, 3]); stream .map((int n) { print('raw $n'); return n + 1; }) .listen((int n) { print('end $n'); }); }

Видны этапы "raw" и "end" для каждого числа. listen стоит в конце цепочки и запускает выдачу.

Поток из 1 и 2 перед listen должен печатать слово "tick" на каждом элементе внутри обработчика, затем выводить само число.

Три буквы "p", "q", "r" подключите через listen с выводом длины строки, не меняя исходные буквы в потоке.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить