Showing
3 changed files
with
18 additions
and
7 deletions
| @@ -55,6 +55,8 @@ You cannot ${isClosed ? "close" : "add events to"} a closed stream.'''; | @@ -55,6 +55,8 @@ You cannot ${isClosed ? "close" : "add events to"} a closed stream.'''; | ||
| 55 | listenable.addSubscription(subs); | 55 | listenable.addSubscription(subs); | 
| 56 | return subs; | 56 | return subs; | 
| 57 | } | 57 | } | 
| 58 | + | ||
| 59 | + Stream<T> get stream => GetStreamTransformation(listenable); | ||
| 58 | } | 60 | } | 
| 59 | 61 | ||
| 60 | class LightListenable<T> { | 62 | class LightListenable<T> { | 
| @@ -125,7 +127,10 @@ class LightSubscription<T> extends StreamSubscription<T> { | @@ -125,7 +127,10 @@ class LightSubscription<T> extends StreamSubscription<T> { | ||
| 125 | bool cancelOnError = false; | 127 | bool cancelOnError = false; | 
| 126 | 128 | ||
| 127 | @override | 129 | @override | 
| 128 | - Future<void> cancel() async => listener.removeSubscription(this); | 130 | + Future<void> cancel() { | 
| 131 | + listener.removeSubscription(this); | ||
| 132 | + return Future.value(); | ||
| 133 | + } | ||
| 129 | 134 | ||
| 130 | OnData<T> _data; | 135 | OnData<T> _data; | 
| 131 | 136 | 
| @@ -11,6 +11,8 @@ bool _conditional(dynamic condition) { | @@ -11,6 +11,8 @@ bool _conditional(dynamic condition) { | ||
| 11 | return true; | 11 | return true; | 
| 12 | } | 12 | } | 
| 13 | 13 | ||
| 14 | +typedef WorkerCallback<T> = Function(T callback); | ||
| 15 | + | ||
| 14 | /// | 16 | /// | 
| 15 | /// Called every time [listener] changes. As long as the [condition] | 17 | /// Called every time [listener] changes. As long as the [condition] | 
| 16 | /// returns true. | 18 | /// returns true. | 
| @@ -41,7 +43,7 @@ bool _conditional(dynamic condition) { | @@ -41,7 +43,7 @@ bool _conditional(dynamic condition) { | ||
| 41 | /// void increment() => count + 1; | 43 | /// void increment() => count + 1; | 
| 42 | /// } | 44 | /// } | 
| 43 | /// ``` | 45 | /// ``` | 
| 44 | -Worker ever<T>(RxInterface<T> listener, Function(T) callback, | 46 | +Worker ever<T>(RxInterface<T> listener, WorkerCallback<T> callback, | 
| 45 | {dynamic condition = true}) { | 47 | {dynamic condition = true}) { | 
| 46 | StreamSubscription sub = listener.subject.listen((event) { | 48 | StreamSubscription sub = listener.subject.listen((event) { | 
| 47 | if (_conditional(condition)) callback(event); | 49 | if (_conditional(condition)) callback(event); | 
| @@ -53,7 +55,7 @@ Worker ever<T>(RxInterface<T> listener, Function(T) callback, | @@ -53,7 +55,7 @@ Worker ever<T>(RxInterface<T> listener, Function(T) callback, | ||
| 53 | /// for the [callback] is common to all [listeners], | 55 | /// for the [callback] is common to all [listeners], | 
| 54 | /// and the [callback] is executed to each one of them. The [Worker] is | 56 | /// and the [callback] is executed to each one of them. The [Worker] is | 
| 55 | /// common to all, so [worker.dispose()] will cancel all streams. | 57 | /// common to all, so [worker.dispose()] will cancel all streams. | 
| 56 | -Worker everAll(List<RxInterface> listeners, Function(dynamic) callback, | 58 | +Worker everAll(List<RxInterface> listeners, WorkerCallback callback, | 
| 57 | {dynamic condition = true}) { | 59 | {dynamic condition = true}) { | 
| 58 | final evers = <StreamSubscription>[]; | 60 | final evers = <StreamSubscription>[]; | 
| 59 | for (var i in listeners) { | 61 | for (var i in listeners) { | 
| @@ -94,7 +96,7 @@ Worker everAll(List<RxInterface> listeners, Function(dynamic) callback, | @@ -94,7 +96,7 @@ Worker everAll(List<RxInterface> listeners, Function(dynamic) callback, | ||
| 94 | /// void increment() => count + 1; | 96 | /// void increment() => count + 1; | 
| 95 | /// } | 97 | /// } | 
| 96 | ///``` | 98 | ///``` | 
| 97 | -Worker once<T>(RxInterface<T> listener, Function(T) callback, | 99 | +Worker once<T>(RxInterface<T> listener, WorkerCallback<T> callback, | 
| 98 | {dynamic condition}) { | 100 | {dynamic condition}) { | 
| 99 | Worker ref; | 101 | Worker ref; | 
| 100 | StreamSubscription sub; | 102 | StreamSubscription sub; | 
| @@ -102,8 +104,10 @@ Worker once<T>(RxInterface<T> listener, Function(T) callback, | @@ -102,8 +104,10 @@ Worker once<T>(RxInterface<T> listener, Function(T) callback, | ||
| 102 | if (!_conditional(condition)) return; | 104 | if (!_conditional(condition)) return; | 
| 103 | ref._disposed = true; | 105 | ref._disposed = true; | 
| 104 | ref._log('called'); | 106 | ref._log('called'); | 
| 105 | - sub?.cancel(); | ||
| 106 | callback(event); | 107 | callback(event); | 
| 108 | + Timer.run(() { | ||
| 109 | + sub?.cancel(); | ||
| 110 | + }); | ||
| 107 | }); | 111 | }); | 
| 108 | ref = Worker(sub.cancel, '[once]'); | 112 | ref = Worker(sub.cancel, '[once]'); | 
| 109 | return ref; | 113 | return ref; | 
| @@ -126,7 +130,7 @@ Worker once<T>(RxInterface<T> listener, Function(T) callback, | @@ -126,7 +130,7 @@ Worker once<T>(RxInterface<T> listener, Function(T) callback, | ||
| 126 | /// condition: () => count < 20, | 130 | /// condition: () => count < 20, | 
| 127 | /// ); | 131 | /// ); | 
| 128 | /// ``` | 132 | /// ``` | 
| 129 | -Worker interval<T>(RxInterface<T> listener, Function(T) callback, | 133 | +Worker interval<T>(RxInterface<T> listener, WorkerCallback<T> callback, | 
| 130 | {Duration time = const Duration(seconds: 1), dynamic condition = true}) { | 134 | {Duration time = const Duration(seconds: 1), dynamic condition = true}) { | 
| 131 | var debounceActive = false; | 135 | var debounceActive = false; | 
| 132 | time ??= const Duration(seconds: 1); | 136 | time ??= const Duration(seconds: 1); | 
| @@ -159,7 +163,7 @@ Worker interval<T>(RxInterface<T> listener, Function(T) callback, | @@ -159,7 +163,7 @@ Worker interval<T>(RxInterface<T> listener, Function(T) callback, | ||
| 159 | /// ); | 163 | /// ); | 
| 160 | /// } | 164 | /// } | 
| 161 | /// ``` | 165 | /// ``` | 
| 162 | -Worker debounce<T>(RxInterface<T> listener, Function(T) callback, | 166 | +Worker debounce<T>(RxInterface<T> listener, WorkerCallback<T> callback, | 
| 163 | {Duration time}) { | 167 | {Duration time}) { | 
| 164 | final _debouncer = | 168 | final _debouncer = | 
| 165 | Debouncer(delay: time ?? const Duration(milliseconds: 800)); | 169 | Debouncer(delay: time ?? const Duration(milliseconds: 800)); | 
- 
Please register or login to post a comment