@@ -2,6 +2,7 @@ import 'dart:async' show Stream, StreamSubscription;
22
33import 'package:flutter/foundation.dart' show ValueListenable;
44import 'package:rxdart/rxdart.dart' show ErrorAndStackTrace, ValueStream;
5+ import 'package:rxdart/src/utils/value_wrapper.dart' ;
56
67import 'listenable_to_stream.dart' ;
78import 'streamx.dart' ;
@@ -25,46 +26,42 @@ extension ValueListenableToValueStream<T> on ValueListenable<T> {
2526class ValueListenableStream <T > extends Stream <T > implements ValueStream <T > {
2627 final ValueListenable <T > _valueListenable;
2728 final bool _replayValue;
28- Stream <T > _stream;
29+ Stream <T >? _stream;
30+
31+ T _getValue ([void _]) => _valueListenable.value;
2932
3033 /// Construct a [ValueListenableStream] from [ValueListenable] .
3134 ValueListenableStream (this ._valueListenable, this ._replayValue);
3235
33- @override
34- bool get isBroadcast => false ;
35-
36- @override
37- ErrorAndStackTrace get errorAndStackTrace => null ;
38-
39- @override
40- bool get hasError => false ;
41-
42- @override
43- bool get hasValue => true ;
44-
45- @override
46- T get value => _valueListenable.value;
47-
4836 @override
4937 StreamSubscription <T > listen (
50- void Function (T ) onData, {
51- Function onError,
52- void Function () onDone,
53- bool cancelOnError,
38+ void Function (T )? onData, {
39+ Function ? onError,
40+ void Function ()? onDone,
41+ bool ? cancelOnError,
5442 }) {
55- final getValue = ([void _]) => _valueListenable.value;
56-
5743 if (_replayValue) {
58- _stream ?? = _valueListenable.toStream ().map (getValue).startWith (getValue);
44+ _stream ?? =
45+ _valueListenable.toStream ().map (_getValue).startWith (_getValue);
5946 } else {
60- _stream ?? = _valueListenable.toStream ().map (getValue );
47+ _stream ?? = _valueListenable.toStream ().map (_getValue );
6148 }
6249
63- return _stream.listen (
50+ return _stream! .listen (
6451 onData,
6552 onError: onError,
6653 onDone: onDone,
6754 cancelOnError: cancelOnError,
6855 );
6956 }
57+
58+ @override
59+ bool get isBroadcast => false ;
60+
61+ @override
62+ Never get errorAndStackTrace =>
63+ throw StateError ('This Stream always has no error!' );
64+
65+ @override
66+ ValueWrapper <T > get valueWrapper => ValueWrapper (_getValue ());
7067}
0 commit comments