toObservableList
and toObservableMap
, better typed versions of toObservable
.Fix generic type error that occurs when using ChangeNotifier with a subclass of ChangeRecord. Previously, calling notifyChanges()
on class Foo with ChangeNotifier<CustomChangeRecord> {}
would throw a type error. Now, the changes
stream emits a custom ChangeRecords
class that implements the List
interface. This change is backwards compatible.
Support Dart 2 stable.
Bump and widen dev dependencies on build packages.
Update implementations of the cast()
and the deprecated retype()
methods.
retype()
method on List and Map is deprecated and will be removed.cast()
method should do what the retype()
method did.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.applyChangeRecords
ObservableList.calculateChangeRecords
ObservableList.withLength
ObservableList.deliverListChanges
ObservableList.discardListChanges
ObservableList.hasListChanges
ObservableList.listChanges
ObservableList.notifyListChange
ObservableList
may no longer be extendedRevert considered deprecated to be notified of length
, isEmpty
and isNotEmpty
PropertyChangeRecord
s 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.listChanges
ObservableList.listChanges
MapChangeRecord
ObservableList.discardListChanges
functionalityObservable<List|Set|Map>.unmodifiable
for immutable collectionsObservable<List|Set|Map>.EMPTY
for empty immutable collectionsObservableSet
, SetChangeRecord
, and SetDiffer
ObservableMap
-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.applyChangeRecords
ObservableList.calculateChangeRecords
ObservableList.withLength
ObservableList.deliverListChanges
ObservableList.discardListChanges
ObservableList.hasListChanges
ObservableList.listChanges
ObservableList.notifyListChange
ObservableList
may no longer be extendedIt is also considered deprecated to be notified of length
, isEmpty
and isNotEmpty
PropertyChangeRecord
s 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.observed
Observable.unobserved
Observable.hasObservers
Observable.deliverChanges
Observable.notifyChange
PropertyChangeNotifier
should be used for these methods:Observable.notifyPropertyChange
Observable
uses ChangeNotifier
implements 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 illegalMapChangeRecord
MapChangeRecord.apply
to apply a change recordMapDiffer
, which implements Differ
for a Map
ListDiffer
that caused a RangeError
/*<E>*/
syntax in 0.15.0
Differ
interface, as well as EqualityDiffer
ListDiffer
ChangeRecord.ANY
and ChangeRecord.NONE
ListChangeRecord
ListChangeRecord.apply
to apply a change record@override
annotations to satisfy annotate_overrides
pkg/meta
.