在BLoC中使用StreamController来控制Stream的输出,在使用自定义转换器时,应该确保转换器正确地处理Stream并按预期方式发出事件。
以下是一种可能的解决方法,其中包含自定义转换器代码示例:
class MyBloc {
final _controller = StreamController();
Sink get input => _controller.sink;
Stream get output => _controller.stream;
void dispose() {
_controller.close();
}
void emit(String data) {
input.add(data);
}
}
class MyTransformer extends StreamTransformerBase {
@override
Stream bind(Stream stream) {
return stream.map((data) => int.tryParse(data) ?? 0);
}
}
class MyBloc {
final _controller = StreamController();
Sink get input => _controller.sink;
Stream get output => _controller.stream.transform(MyTransformer());
void dispose() {
_controller.close();
}
void emit(String data) {
input.add(data);
}
}
通过这种方式,BLoC将不会返回空的Stream,而是将转换后的事件发送到下游的侦听器中。
下一篇:BLoC之间合作的首选方式