创建一条流,该流将向每个订阅发射一个常数值

问题描述 投票:0回答:1

我想创建一个可以向每个订户散发一个值的流,无论何时订阅。

谨慎地,以下代码应在

42

之前打印两个
done
,但是给定的方法都不起作用。
void main() async { final stream = createStream(42); stream.listen(printValue); await Future.delayed(Duration(seconds: 1)); stream.listen(printValue); // Wait for everything to finish. await Future.delayed(Duration(seconds: 1)); print('done'); } Stream<int> createStream(int val) { // Error: Stream has already been listened to. // return Stream.value(val); // Only gets one output return Stream.value(val).asBroadcastStream(); } void printValue(int val) { print(val); }

既定的输出:

42 42 done

Stream.value()

生成错误

Stream has already been listened to.
.asBroadcastStream()
给出了错误的结果。
注:使用RXDART的答案将受到欢迎。
    


您可以使用多订阅标准流来实现所需的输出:

flutter dart rxdart
1个回答
0
投票

控制台输出在下面列出:

$ dart main.dart 
42
42
done

注:创建多订阅标准流的另一种简便方法是使用工厂构造函数

Stream.fromIterable

/// Returns a multi-subscription stream that yields only `val`. Stream<int> createStream(int val) => Stream.fromIterable([val]);

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.