如何将Sink <T>转换为Sink <V>?

时间:2019-11-29 20:15:08

标签: dart

我有一种方法可以将其输出发射到给定的ImmutableList中。

我想将其传送到Sink<Node>的{​​{1}}中。

假设我有一个将stdout转换为Sink<List<int>>的函数convert,我该如何将Node转换成List<int>,以便它可以打印我的树到控制台?

1 个答案:

答案 0 :(得分:2)

我已经制作了这个示例,展示了如何使用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>,方法是先使用mapMessage转换为String对象,然后使用转换器进行转换将字符串转换为UTF8字节列表。