commit | d1cf199b07e4c220d0621e82fcda02891ec02754 | [log] [tgz] |
---|---|---|
author | Florian Loitsch <floitsch@google.com> | Wed Feb 08 17:47:21 2017 +0100 |
committer | Matan Lurey <matanlurey@users.noreply.github.com> | Wed Feb 08 08:47:21 2017 -0800 |
tree | 9f5082fde9f5523923b90f555f9dbe1da032b91a | |
parent | 893866425c6292712190ac1b7b0d28db6423a5e1 [diff] |
Don't use generic types in constant expressions. (#32) * Don't use generic types in constant expressions. Constant expressions are not allowed to use generic types in Dart 1. Fixes issue #31. * Update pubspec.yaml.
Support for detecting and being notified when an object is mutated.
An observable is a way to be notified of a continuous stream of events over time.
Some suggested uses for this library:
You may want to look at the former TC39 proposal Observe.observe, which was deprecated.
There are two general ways to detect changes:
Observable.changes
and be notified when an object changesDiffer.diff
to determine changes between two objectsOperations on Lists:
import 'package:observable/observable.dart'; void main() { var changes; ObservableList<String> list = new ObservableList<String>.from(['a', 'b', 'c']); StreamSubscription sub = list.listChanges.listen((c) => changes = c); ListChangeRecord _delta( int index, { List removed: const [], int addedCount: 0, }) { return new ListChangeRecord( list, index, removed: removed, addedCount: addedCount, ); } list.insertAll(1, ['y', 'z']); // changes == [_delta(1, addedCount: 2)] }
Diffing two maps:
import 'package:observable/observable.dart'; void main() { final map1 = { 'key-a': 'value-a', 'key-b': 'value-b-old', }; final map2 = { 'key-a': 'value-a', 'key-b': 'value-b-new', }; var diffResult = diff(map1, map2); // [ new MapChangeRecord('key-b', 'value-b-old', 'value-b-new')] }
Diffing two sets:
import 'package:observable/observable.dart'; void main() { diff( new Set<String>.from(['a', 'b']), new Set<String>.from(['a']), ); // [ new SetChangeRecord.remove('b') ] }