commit | e93fd28e6911c958eac5c9ef93f2f9034e3334a8 | [log] [tgz] |
---|---|---|
author | Bob Nystrom <robert@stuffwithstuff.com> | Wed Feb 28 17:37:27 2018 -0800 |
committer | GitHub <noreply@github.com> | Wed Feb 28 17:37:27 2018 -0800 |
tree | 3a7afe13c0f2167889654f5b4d8697d2164ee972 | |
parent | 957846a887b3666785f062b910e13ebf458bce92 [diff] |
Fix runtime cast failures. (#57) * Fix runtime cast failures. In strong mode, a generic type instantiated with dynamic is not a subtype of all types. You can't pass a List<dynamic> to something expecting, say, List<int>. These errors are usually detected statically, and most of those have been fixed. However, sometimes this becomes a runtime cast, as in: main() { // Store a List<dynamic> in a variable of type dynamic. dynamic d = []; // Implicit runtime downcast from dynamic to List<String>. List<String> s = d; } In order to ease the migration to strong mode, DDC has been ignoring these cast failures when they involve certain commonly used types. We are now in the process of actively fixing those errors. More context: https://github.com/dart-lang/sdk/issues/27223 * Update SDK constraints. * Use newer dev version of the SDK on Travis. * Bump minimum SDK constraint.
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 objects