Added ObservableList.castFrom, similar to List.castFrom.
Changed ObservableList's cast and retype function to create a forwarding instance of ObservableList instead of an instance of List.
Added ObservableMap.castFrom, similar to Map.castFrom.
Fixed a bug where ObservableMap's cast and retype function would create a new empty instance instead of a forwarding instance.
UnimplementedError.toObservable(deep: false) to be shallow again.Maps, for better compatibility with Dart 2.toObservable().ObservableList.from() to take Iterable, not Iterable<T>. This matches List.from() and avoids some unnecessary cast failures.Version 0.21.0 reverts to version 0.17.0+1 with fixes to support Dart 2. Versions 0.18, 0.19, and 0.20 were not used by the package authors and effectively unsupported. This resolves the fork that happened at version 0.18 and development can now be supported by the authors.
(From 0.20.1)
Observable<List|Set|Map>.unmodifiable for immutable collectionsObservable<List|Set|Map>.EMPTY for empty immutable collections(From 0.20.0)
ObservableSet, SetChangeRecord, and SetDiffer(From 0.19.0)
ObservableMap-specific APIObservableMap no longer emits #keys and #values change recordsObservableMap.spy is deprecated, becomes .delegate insteadObservableMap may no longer be extendedRevert considered deprecated to be notified of length changes.
(From 0.18.0)
ObservableList-specific APIObservableList.applyChangeRecordsObservableList.calculateChangeRecordsObservableList.withLengthObservableList.deliverListChangesObservableList.discardListChangesObservableList.hasListChangesObservableList.listChangesObservableList.notifyListChangeObservableList may no longer be extendedRevert considered deprecated to be notified of length, isEmpty and isNotEmpty PropertyChangeRecords on ObservableList
(With internal change numbers)
@protected to @visibleForTesting. cl/147029982ChangeRecord.NONE creates a List<ChangeRecord>, while the call sites expect a List<ListChangeRecord> or List<MapChangeRecord>, respectively. cl/155201160Observable._isNotGeneric check. cl/162282107Observable{List|Map}.NONE (not Dart2 compatible).ObservableList._notifyListChange. cl/182284033pkg/quiver (0.27).pkg/quiver (0.26).extends ChangeNotifier rather than extends ChangeNotifier<PropertyChangeRecord>.ListChangeRecord.NONE and MapChangeRecord.NONE.pkg/quiver (0.25).ObservableList.listChangesObservableList.listChangesMapChangeRecordObservableList.discardListChanges functionalityObservable<List|Set|Map>.unmodifiable for immutable collectionsObservable<List|Set|Map>.EMPTY for empty immutable collectionsObservableSet, SetChangeRecord, and SetDifferObservableMap-specific APIObservableMap no longer emits #keys and #values change recordsObservableMap.spy is deprecated, becomes .delegate insteadObservableMap may no longer be extendedIt is also considered deprecated to be notified of length changes.
Observable<T>.notifyChange is usedObservableList-specific APIObservableList.applyChangeRecordsObservableList.calculateChangeRecordsObservableList.withLengthObservableList.deliverListChangesObservableList.discardListChangesObservableList.hasListChangesObservableList.listChangesObservableList.notifyListChangeObservableList may no longer be extendedIt is also considered deprecated to be notified of length, isEmpty and isNotEmpty PropertyChangeRecords on ObservableList - in a future release ObservableList.changes will be Stream<List<ListChangeRecord>>.
PropertyChangeMixin, which does not work in dart2jsThis is a larger change with a goal of no runtime changes for current customers, but in the future Observable will become a very lightweight interface, i.e.:
abstract class Observable<C extends ChangeRecord> { Stream<List<C>> get changes; }
Observable interfaceChangeNotifier should be used as a base class for these methods:Observable.observedObservable.unobservedObservable.hasObserversObservable.deliverChangesObservable.notifyChangePropertyChangeNotifier should be used for these methods:Observable.notifyPropertyChangeObservable uses ChangeNotifierimplements Observable should move to implementing or extending ChangeNotifier. In a future release Observable will reduce API surface down to an abstract Stream<List<C>> get changes.ChangeNotifier and PropertyChangeNotifier classesObservable in a generic mannerObservable<C extends ChangeRecord>C, notifyPropertyChange is illegalMapChangeRecordMapChangeRecord.apply to apply a change recordMapDiffer, which implements Differ for a MapListDiffer that caused a RangeError/*<E>*/ syntax in 0.15.0Differ interface, as well as EqualityDifferListDifferChangeRecord.ANY and ChangeRecord.NONEListChangeRecordListChangeRecord.apply to apply a change record@override annotations to satisfy annotate_overridespkg/meta.