blob: f1c8c448f363f58845c1f9cbd157716dfe110fc3 [file] [log] [blame] [view]
## 0.24.0-dev
* Migrate to [null safety](https://dart.dev/null-safety).
* Update ObservableMap to notify observers about changes for all methods.
## 0.23.0
* Support latest dependencies.
* Reintroduce custom equality for `PropertyChangeRecord` from 0.18.0.
## 0.22.2
* Add `toObservableList` and `toObservableMap`, better typed versions of
`toObservable`.
## 0.22.1+5
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.
## 0.22.1+4
* Support Dart 2 stable.
* Bump and widen dev dependencies on build packages.
## 0.22.1+3
Update implementations of the `cast()` and the deprecated `retype()` methods.
* The `retype()` method on List and Map is deprecated and will be removed.
* The `cast()` method should do what the `retype()` method did.
## 0.22.1+2
* Widen dependency on quiver to include v0.29.
## 0.22.1+1
* Fixes for Dart2 runtime type errors.
## 0.22.1
* 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`.
## 0.22.0
* 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.
## 0.21.3
* Support Dart 2 collection methods where previously threw `UnimplementedError`.
## 0.21.2
* Fix `toObservable(deep: false)` to be shallow again.
* Remove use of `Maps`, for better compatibility with Dart 2.
## 0.21.1
* Updated one test to comply with Dart 2 voidness semantics.
* Fix Dart 2 runtime cast failure in `toObservable()`.
* Loosen `ObservableList.from()` to take `Iterable`, not `Iterable<T>`. This
matches `List.from()` and avoids some unnecessary cast failures.
## 0.21.0
### Breaking Changes
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.
#### Reverted Changes
(From 0.20.1)
* Revert add `Observable<List|Set|Map>.unmodifiable` for immutable collections
* Revert add `Observable<List|Set|Map>.EMPTY` for empty immutable collections
* This can be used as an optimization for libraries that always need to return
an observable collection, but don't want to allocate a new instance to
represent an empty immutable.
(From 0.20.0)
* Revert add `ObservableSet`, `SetChangeRecord`, and `SetDiffer`
(From 0.19.0)
* Revert refactor and deprecate `ObservableMap`-specific API
* `ObservableMap` no longer emits `#keys` and `#values` change records
* `ObservableMap.spy` is deprecated, becomes `.delegate` instead
* Revert Potentially breaking: `ObservableMap` may no longer be extended
Revert considered deprecated to be notified of `length` changes.
(From 0.18.0)
* Revert refactor and deprecate `ObservableList`-specific API
* `ObservableList.applyChangeRecords`
* `ObservableList.calculateChangeRecords`
* `ObservableList.withLength`
* `ObservableList.deliverListChanges`
* `ObservableList.discardListChanges`
* `ObservableList.hasListChanges`
* `ObservableList.listChanges`
* `ObservableList.notifyListChange`
* Revert potentially breaking: `ObservableList` may no longer be extended
Revert considered deprecated to be notified of `length`, `isEmpty` and
`isNotEmpty` `PropertyChangeRecord`s on `ObservableList`
#### Changes Applied on top of version 0.17.0+1
(With internal change numbers)
* Flip deliverChanges from `@protected` to `@visibleForTesting`. cl/147029982
* Fix a typing bug in observable when running with DDC: `ChangeRecord.NONE`
creates a `List<ChangeRecord>`, while the call sites expect a
`List<ListChangeRecord>` or `List<MapChangeRecord>`, respectively.
cl/155201160
* Fix `Observable._isNotGeneric` check. cl/162282107
* Fix issue with type in deliverChanges. cl/162493576
* Stop using the comment syntax for generics. cl/163224019
* Fix ListChangeRecord's added getter. Add checks for the added and removed
getters in listChangeTests. cl/169261086.
* Migrate observable to real generic method syntax. cl/170239122
* Fix only USES_DYNAMIC_AS_BOTTOM error in observable. cl/179946618
* Cherry pick https://github.com/dart-lang/observable/pull/46.
* Stub out Dart 2 core lib changes in ObservableMap.
* Removed `Observable{List|Map}.NONE` (not Dart2 compatible).
* Fix issue with type in `ObservableList._notifyListChange`. cl/182284033
## 0.20.4+3
* Support the latest release of `pkg/quiver` (0.27).
## 0.20.4+2
* Support the latest release of `pkg/quiver` (0.26).
* Bug fix: Some minor type fixes for strict runtimes (and Dart 2.0), namely:
* PropertyChangeNotifier merely `extends
ChangeNotifier` rather than `extends ChangeNotifier<PropertyChangeRecord>`.
* Introduce new `ListChangeRecord.NONE` and `MapChangeRecord.NONE`.
## 0.20.4+1
* Support the latest release of `pkg/quiver` (0.25).
## 0.20.4
* Bug fix: Additional fix around `ObservableList.listChanges`
## 0.20.3
* Bug fix: Avoid emitting an empty list via `ObservableList.listChanges`
## 0.20.2
* Bug fix: Avoid emitting a no-op `MapChangeRecord`
* Bug fix: Restore `ObservableList.discardListChanges` functionality
## 0.20.1
* Add `Observable<List|Set|Map>.unmodifiable` for immutable collections
* Add `Observable<List|Set|Map>.EMPTY` for empty immutable collections
* This can be used as an optimization for libraries that always
need to return an observable collection, but don't want to
allocate a new instance to represent an empty immutable.
## 0.20.0
* Add `ObservableSet`, `SetChangeRecord`, and `SetDiffer`
## 0.19.0
* Refactor and deprecate `ObservableMap`-specific API
* `ObservableMap` no longer emits `#keys` and `#values` change records
* `ObservableMap.spy` is deprecated, becomes `.delegate` instead
* Potentially breaking: `ObservableMap` may no longer be extended
It is also considered deprecated to be notified of `length` changes.
## 0.18.1
* Bug fix: Do not throw when `Observable<T>.notifyChange` is used
## 0.18.0
* Refactor and deprecate `ObservableList`-specific API
* `ObservableList.applyChangeRecords`
* `ObservableList.calculateChangeRecords`
* `ObservableList.withLength`
* `ObservableList.deliverListChanges`
* `ObservableList.discardListChanges`
* `ObservableList.hasListChanges`
* `ObservableList.listChanges`
* `ObservableList.notifyListChange`
* Potentially breaking: `ObservableList` may no longer be extended
It 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>>`.
## 0.17.0+1
* Revert `PropertyChangeMixin`, which does not work in dart2js
## 0.17.0
This is a larger change with a goal of no runtime changes for current
customers, but in the future `Observable` will [become][issue_10] a very
lightweight interface, i.e.:
```dart
abstract class Observable<C extends ChangeRecord> {
Stream<List<C>> get changes;
}
```
[issue_10]: https://github.com/dart-lang/observable/issues/10
* Started deprecating the wide `Observable` interface
* `ChangeNotifier` 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`
* Temporarily, `Observable` _uses_ `ChangeNotifier`
* Existing users of anything but `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`.
* Added the `ChangeNotifier` and `PropertyChangeNotifier` classes
* Can be used to implement `Observable` in a generic manner
* Observable is now `Observable<C extends ChangeRecord>`
* When passing a generic type `C`, `notifyPropertyChange` is illegal
## 0.16.0
* Refactored `MapChangeRecord`
* Added equality and hashCode checks
* Added `MapChangeRecord.apply` to apply a change record
* Added `MapDiffer`, which implements `Differ` for a `Map`
## 0.15.0+2
* Fix a bug in `ListDiffer` that caused a `RangeError`
## 0.15.0+1
* Fix analysis errors caused via missing `/*<E>*/` syntax in `0.15.0`
## 0.15.0
* Added the `Differ` interface, as well as `EqualityDiffer`
* Refactored list diffing into a `ListDiffer`
* Added concept of `ChangeRecord.ANY` and `ChangeRecord.NONE`
* Low-GC ways to expression "something/nothing" changed
* Refactored `ListChangeRecord`
* Added named constructors for common use cases
* Added equality and hashCode checks
* Added `ListChangeRecord.apply` to apply a change record
* Added missing `@override` annotations to satisfy `annotate_overrides`
## 0.14.0+1
* Add a missing dependency on `pkg/meta`.