Quero criar um fluxo que possa emitir um único valor para cada assinante, não importa quando ele se inscreveu.
O ideal seria que o código a seguir imprimisse dois 42
antes de done
, mas nenhuma das abordagens fornecidas funciona.
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);
}
Saída desejada:
42
42
done
Mas Stream.value()
gera um erro Stream has already been listened to.
. Enquanto .asBroadcastStream()
dá o resultado errado.
Observação: respostas usando o RxDart serão bem-vindas.