我有一个方法可以将其输出发送到给定的Sink<Node>中。
我想把它导入stdout,这是一个Sink<List<int>>。
假设我有一个函数convert将Node转换为List<int>,我如何将stdout转换为Sink<Node>,以便将my Tree打印到控制台?
发布于 2019-11-29 20:26:39
我已经做了这个例子,展示了如何使用StreamController来完成这个任务:
import 'dart:async';
import 'dart:convert';
import 'dart:io';
class Message {
String text;
Message(this.text);
}
void main() {
final controller = StreamController<Message>();
stdout.addStream(controller.stream
.map((var msg) => msg.text)
.transform(const Utf8Encoder()));
var messageSink = controller.sink;
messageSink.add(Message('Hello World'));
}本例中的StreamController接受Message对象并将它们转换为List<int>,方法是首先使用map将Message转换为String对象,然后使用转换器将字符串转换为UTF8字节列表。
发布于 2022-12-02 23:49:40
我已经登记了:https://github.com/dart-lang/sdk/issues/50607
我就是这样解决这个问题的:
class _MappedSink<From, To> implements Sink<From> {
final To Function(From) _transform;
final Sink<To> _sink;
const _MappedSink(this._sink, this._transform);
@override
void add(From data) => _sink.add(_transform(data));
@override
void close() => _sink.close();
}
extension SinkMap<To> on Sink<To> {
Sink<From> map<From>(To Function(From) transform) =>
_MappedSink(this, transform);
}https://stackoverflow.com/questions/59110527
复制相似问题