11import 'dart:async' show Stream, StreamSubscription;
22
33import 'package:flutter/foundation.dart' show ValueListenable;
4- import 'package:rxdart/rxdart.dart' show ErrorAndStackTrace, ValueStream ;
4+ import 'package:rxdart/rxdart.dart' show ValueStream, ValueWrapper ;
55
66import 'common.dart' ;
77import 'streamx.dart' ;
@@ -22,40 +22,25 @@ extension ValueListenableToValueStream<T> on ValueListenable<T> {
2222 ///
2323 /// If [replayValue] is true, the returned [ValueStream] will replay latest value when listening to it.
2424 /// Otherwise, it does not.
25- ValueStream <T > toValueStream ({bool replayValue = false }) =>
25+ ValueListenableStream <T > toValueStream ({bool replayValue = false }) =>
2626 ValueListenableStream <T >(this , replayValue);
2727}
2828
2929/// A Single-Subscription Stream will emits data when [ValueListenable.value] changed.
3030class ValueListenableStream <T > extends Stream <T > implements ValueStream <T > {
3131 final ValueListenable <T > _valueListenable;
3232 final bool _replayValue;
33- Stream <T > _stream;
33+ Stream <T >? _stream;
3434
3535 /// Construct a [ValueListenableStream] from [ValueListenable] .
3636 ValueListenableStream (this ._valueListenable, this ._replayValue);
3737
38- @override
39- bool get isBroadcast => false ;
40-
41- @override
42- ErrorAndStackTrace get errorAndStackTrace => null ;
43-
44- @override
45- bool get hasError => false ;
46-
47- @override
48- bool get hasValue => true ;
49-
50- @override
51- T get value => _valueListenable.value;
52-
5338 @override
5439 StreamSubscription <T > listen (
55- void Function (T ) onData, {
56- Function onError,
57- void Function () onDone,
58- bool cancelOnError,
40+ void Function (T )? onData, {
41+ Function ? onError,
42+ void Function ()? onDone,
43+ bool ? cancelOnError,
5944 }) {
6045 if (_replayValue) {
6146 _stream ?? =
@@ -64,11 +49,21 @@ class ValueListenableStream<T> extends Stream<T> implements ValueStream<T> {
6449 _stream ?? = _valueListenable.toStream ();
6550 }
6651
67- return _stream.listen (
52+ return _stream! .listen (
6853 onData,
6954 onError: onError,
7055 onDone: onDone,
7156 cancelOnError: cancelOnError,
7257 );
7358 }
59+
60+ @override
61+ bool get isBroadcast => false ;
62+
63+ @override
64+ Never get errorAndStackTrace =>
65+ throw StateError ('This Stream always has no error!' );
66+
67+ @override
68+ ValueWrapper <T > get valueWrapper => ValueWrapper (_valueListenable.value);
7469}
0 commit comments