Showing
2 changed files
with
26 additions
and
58 deletions
@@ -11,7 +11,10 @@ part 'rx_num.dart'; | @@ -11,7 +11,10 @@ part 'rx_num.dart'; | ||
11 | RxInterface getObs; | 11 | RxInterface getObs; |
12 | 12 | ||
13 | /// Base Rx class that manages all the stream logic for any Type. | 13 | /// Base Rx class that manages all the stream logic for any Type. |
14 | -class _RxImpl<T> implements RxInterface<T> { | 14 | +abstract class _RxImpl<T> implements RxInterface<T> { |
15 | + _RxImpl(T initial) { | ||
16 | + _value = initial; | ||
17 | + } | ||
15 | StreamController<T> subject = StreamController<T>.broadcast(); | 18 | StreamController<T> subject = StreamController<T>.broadcast(); |
16 | final _subscriptions = HashMap<Stream<T>, StreamSubscription>(); | 19 | final _subscriptions = HashMap<Stream<T>, StreamSubscription>(); |
17 | 20 | ||
@@ -183,9 +186,7 @@ class _RxImpl<T> implements RxInterface<T> { | @@ -183,9 +186,7 @@ class _RxImpl<T> implements RxInterface<T> { | ||
183 | 186 | ||
184 | /// Rx class for `bool` Type. | 187 | /// Rx class for `bool` Type. |
185 | class RxBool extends _RxImpl<bool> { | 188 | class RxBool extends _RxImpl<bool> { |
186 | - RxBool([bool initial]) { | ||
187 | - _value = initial; | ||
188 | - } | 189 | + RxBool([bool initial]) : super(initial); |
189 | 190 | ||
190 | bool operator &(bool other) => other && value; | 191 | bool operator &(bool other) => other && value; |
191 | 192 | ||
@@ -210,9 +211,7 @@ class RxBool extends _RxImpl<bool> { | @@ -210,9 +211,7 @@ class RxBool extends _RxImpl<bool> { | ||
210 | 211 | ||
211 | /// Rx class for `String` Type. | 212 | /// Rx class for `String` Type. |
212 | class RxString extends _RxImpl<String> { | 213 | class RxString extends _RxImpl<String> { |
213 | - RxString([String initial]) { | ||
214 | - _value = initial; | ||
215 | - } | 214 | + RxString([String initial]) : super(initial); |
216 | 215 | ||
217 | String operator +(String val) => _value + val; | 216 | String operator +(String val) => _value + val; |
218 | } | 217 | } |
@@ -222,9 +221,7 @@ class RxString extends _RxImpl<String> { | @@ -222,9 +221,7 @@ class RxString extends _RxImpl<String> { | ||
222 | /// For example, any custom "Model" class, like User().obs will use `Rx` as | 221 | /// For example, any custom "Model" class, like User().obs will use `Rx` as |
223 | /// wrapper. | 222 | /// wrapper. |
224 | class Rx<T> extends _RxImpl<T> { | 223 | class Rx<T> extends _RxImpl<T> { |
225 | - Rx([T initial]) { | ||
226 | - _value = initial; | ||
227 | - } | 224 | + Rx([T initial]) : super(initial); |
228 | 225 | ||
229 | // TODO: Look for a way to throw the Exception with proper details when the | 226 | // TODO: Look for a way to throw the Exception with proper details when the |
230 | // value [T] doesn't implement toJson(). | 227 | // value [T] doesn't implement toJson(). |
@@ -233,37 +230,26 @@ class Rx<T> extends _RxImpl<T> { | @@ -233,37 +230,26 @@ class Rx<T> extends _RxImpl<T> { | ||
233 | } | 230 | } |
234 | 231 | ||
235 | /// It's Experimental class, the Api can be change | 232 | /// It's Experimental class, the Api can be change |
236 | -abstract class RxState<T> extends RxInterface<T> { | ||
237 | - RxState(T initial) { | ||
238 | - _value = initial; | ||
239 | - } | 233 | +abstract class RxState<T> extends _RxImpl<T> { |
234 | + RxState(T initial) : super(initial); | ||
240 | 235 | ||
241 | - T _value; | ||
242 | - | ||
243 | - StreamController<T> subject = StreamController<T>.broadcast(); | ||
244 | - final _subscriptions = HashMap<Stream<T>, StreamSubscription>(); | 236 | + @protected |
237 | + void refresh() { | ||
238 | + subject.add(_value); | ||
239 | + } | ||
245 | 240 | ||
246 | - bool get canUpdate => _subscriptions.isNotEmpty; | 241 | + @protected |
242 | + void update(void fn(T val)) { | ||
243 | + fn(_value); | ||
244 | + subject.add(_value); | ||
245 | + } | ||
247 | 246 | ||
248 | @protected | 247 | @protected |
249 | T call([T v]) { | 248 | T call([T v]) { |
250 | - if (v != null) { | ||
251 | - value = v; | ||
252 | - } | 249 | + if (v != null) value = v; |
253 | return value; | 250 | return value; |
254 | } | 251 | } |
255 | 252 | ||
256 | - bool firstRebuild = true; | ||
257 | - | ||
258 | - void addListener(Stream<T> rxGetx) { | ||
259 | - if (_subscriptions.containsKey(rxGetx)) { | ||
260 | - return; | ||
261 | - } | ||
262 | - _subscriptions[rxGetx] = rxGetx.listen((data) { | ||
263 | - subject.add(data); | ||
264 | - }); | ||
265 | - } | ||
266 | - | ||
267 | @protected | 253 | @protected |
268 | set value(T val) { | 254 | set value(T val) { |
269 | if (_value == val && !firstRebuild) return; | 255 | if (_value == val && !firstRebuild) return; |
@@ -272,24 +258,6 @@ abstract class RxState<T> extends RxInterface<T> { | @@ -272,24 +258,6 @@ abstract class RxState<T> extends RxInterface<T> { | ||
272 | subject.add(_value); | 258 | subject.add(_value); |
273 | } | 259 | } |
274 | 260 | ||
275 | - /// Returns the current [value] | ||
276 | - T get value { | ||
277 | - if (getObs != null) { | ||
278 | - getObs.addListener(subject.stream); | ||
279 | - } | ||
280 | - return _value; | ||
281 | - } | ||
282 | - | ||
283 | - Stream<T> get stream => subject.stream; | ||
284 | - | ||
285 | - StreamSubscription<T> listen(void Function(T) onData, | ||
286 | - {Function onError, void Function() onDone, bool cancelOnError}) => | ||
287 | - stream.listen(onData, onError: onError, onDone: onDone); | ||
288 | - | ||
289 | - void bindStream(Stream<T> stream) { | ||
290 | - _subscriptions[stream] = stream.listen((va) => value = va); | ||
291 | - } | ||
292 | - | ||
293 | @protected | 261 | @protected |
294 | void change(T newState) { | 262 | void change(T newState) { |
295 | if (newState != _value) { | 263 | if (newState != _value) { |
1 | part of 'rx_impl.dart'; | 1 | part of 'rx_impl.dart'; |
2 | 2 | ||
3 | /// Base Rx class for all num Rx's. | 3 | /// Base Rx class for all num Rx's. |
4 | -class _BaseRxNum<T extends num> extends _RxImpl<T> { | 4 | +abstract class _BaseRxNum<T extends num> extends _RxImpl<T> { |
5 | + _BaseRxNum(T initial) : super(initial); | ||
6 | + | ||
5 | /// Addition operator. */ | 7 | /// Addition operator. */ |
6 | 8 | ||
7 | /// Multiplication operator. | 9 | /// Multiplication operator. |
@@ -267,6 +269,8 @@ class _BaseRxNum<T extends num> extends _RxImpl<T> { | @@ -267,6 +269,8 @@ class _BaseRxNum<T extends num> extends _RxImpl<T> { | ||
267 | } | 269 | } |
268 | 270 | ||
269 | class RxNum extends _BaseRxNum<num> { | 271 | class RxNum extends _BaseRxNum<num> { |
272 | + RxNum(num initial) : super(initial); | ||
273 | + | ||
270 | num operator +(num other) { | 274 | num operator +(num other) { |
271 | value += other; | 275 | value += other; |
272 | return value; | 276 | return value; |
@@ -280,9 +284,7 @@ class RxNum extends _BaseRxNum<num> { | @@ -280,9 +284,7 @@ class RxNum extends _BaseRxNum<num> { | ||
280 | } | 284 | } |
281 | 285 | ||
282 | class RxDouble extends _BaseRxNum<double> { | 286 | class RxDouble extends _BaseRxNum<double> { |
283 | - RxDouble([double initial]) { | ||
284 | - value = initial; | ||
285 | - } | 287 | + RxDouble([double initial]) : super(initial); |
286 | 288 | ||
287 | /// Addition operator. | 289 | /// Addition operator. |
288 | RxDouble operator +(num other) { | 290 | RxDouble operator +(num other) { |
@@ -392,9 +394,7 @@ class RxDouble extends _BaseRxNum<double> { | @@ -392,9 +394,7 @@ class RxDouble extends _BaseRxNum<double> { | ||
392 | } | 394 | } |
393 | 395 | ||
394 | class RxInt extends _BaseRxNum<int> { | 396 | class RxInt extends _BaseRxNum<int> { |
395 | - RxInt([int initial]) { | ||
396 | - value = initial; | ||
397 | - } | 397 | + RxInt([int initial]) : super(initial); |
398 | 398 | ||
399 | /// Addition operator. | 399 | /// Addition operator. |
400 | RxInt operator +(int other) { | 400 | RxInt operator +(int other) { |
-
Please register or login to post a comment