Вы можете использовать StreamTransformer
, поскольку его целью является получение потока, его преобразование и возврат нового.
Итак, с учетом Stream
из Map<String,String>
:
StreamController<Map<String,String>> streamController = StreamController.broadcast();
Stream<Map<String,String>> get phoneNumberBlocks => streamController.stream;
Вы можете создать новый, например:
Stream<List<String>> get phoneNumbers => phoneNumberBlocks.transform(StreamTransformer.fromHandlers(
handleData: (Map<String,String> data, sink) {
sink.add(data.keys.toList());
}
));
StreamTransformer
получит данные от phoneNumberBlocks
и добавит только keys
с карты в новый Stream
List<String>
.
Практический пример:
void main() {
phoneNumbers.listen((s) => print(s));
streamController.sink.add({
'1': 'a',
'2': 'b',
'3': 'c',
});
}
Консоль:
[1, 2, 3]
Смотрите это в действии здесь .