Support Dart 2 stable, prepare to release 0.22.1+4 (#75)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index a216870..a0aac1a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,6 @@
-## 0.22.1+4-dev
+## 0.22.1+4
+
+* Support Dart 2 stable.
 
 * Bump and widen dev dependencies on build packages.
 
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 6f04432..d8d47b4 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,5 +1,3 @@
-analyzer:
-  strong-mode: true
 linter:
   rules:
     # Errors
diff --git a/pubspec.yaml b/pubspec.yaml
index fd5e16d..3a2e7b0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,18 +1,18 @@
 name: observable
-version: 0.22.1+4-dev
+version: 0.22.1+4
 author: Dart Team <misc@dartlang.org>
 description: Support for marking objects as observable
 homepage: https://github.com/dart-lang/observable
 environment:
-  sdk: '>=2.0.0-dev.55.0 <2.0.0'
+  sdk: '>=2.0.0-dev.55.0 <3.0.0'
 dependencies:
-  collection: '^1.11.0'
-  dart_internal: '^0.1.1'
-  meta: '^1.0.4'
-  quiver: '>=0.24.0 <0.30.0'
+  collection: ^1.11.0
+  dart_internal: ^0.1.1
+  meta: ^1.0.4
+  quiver: '>=0.24.0 <3.0.0'
 dev_dependencies:
-  dart_style: '^1.0.9'
   build_runner: '>=0.8.0 <0.10.0'
   build_test: ^0.10.0
   build_web_compilers: '>=0.3.1 <0.5.0'
-  test: ^0.12.0
+  dart_style: ^1.0.9
+  test: ^1.3.0
diff --git a/test/observable_test.dart b/test/observable_test.dart
index 3a05e2d..e88495d 100644
--- a/test/observable_test.dart
+++ b/test/observable_test.dart
@@ -24,7 +24,7 @@
   });
 
   test('handle future result', () {
-    var callback = expectAsync(() {});
+    var callback = expectAsync0(() {});
     return new Future(callback);
   });
 
@@ -48,7 +48,7 @@
     var t = createModel(123);
     int called = 0;
 
-    subs.add(t.changes.listen(expectAsync((records) {
+    subs.add(t.changes.listen(expectAsync1((records) {
       called++;
       expectPropertyChanges(records, 2);
     })));
@@ -62,7 +62,7 @@
     var t = createModel(123);
     int called = 0;
 
-    subs.add(t.changes.listen(expectAsync((records) {
+    subs.add(t.changes.listen(expectAsync1((records) {
       called++;
       expectPropertyChanges(records, 1);
       if (called == 1) {
@@ -81,8 +81,8 @@
       expectPropertyChanges(records, 2);
     }
 
-    subs.add(t.changes.listen(expectAsync(verifyRecords)));
-    subs.add(t.changes.listen(expectAsync(verifyRecords)));
+    subs.add(t.changes.listen(expectAsync1(verifyRecords)));
+    subs.add(t.changes.listen(expectAsync1(verifyRecords)));
 
     t.value = 41;
     t.value = 42;
@@ -112,7 +112,7 @@
   test('cancel listening', () {
     var t = createModel(123);
     var sub;
-    sub = t.changes.listen(expectAsync((records) {
+    sub = t.changes.listen(expectAsync1((records) {
       expectPropertyChanges(records, 1);
       sub.cancel();
       t.value = 777;
@@ -123,12 +123,12 @@
   test('cancel and reobserve', () {
     var t = createModel(123);
     var sub;
-    sub = t.changes.listen(expectAsync((records) {
+    sub = t.changes.listen(expectAsync1((records) {
       expectPropertyChanges(records, 1);
       sub.cancel();
 
       scheduleMicrotask(() {
-        subs.add(t.changes.listen(expectAsync((records) {
+        subs.add(t.changes.listen(expectAsync1((records) {
           expectPropertyChanges(records, 1);
         })));
         t.value = 777;