Fix null safety bug (#72)

* fix null safe tests

* run travis on the null_safety branch

* remove uneccessary casts
diff --git a/.travis.yml b/.travis.yml
index f3c200d..7d59ee7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,29 +1,33 @@
 language: dart
 
 dart:
-  - dev
-  - 2.0.0
+ - dev
 
-dart_task:
-  - test: -p vm
-  - test: -p chrome
-  - dartanalyzer
-
-matrix:
+jobs:
   include:
-    # Only validate formatting using the dev release
-    - dart: dev
-      dart_task: dartfmt
-    - dart: dev
-      dart_task:
-        dartanalyzer: --fatal-infos --fatal-warnings .
-    - dart: 2.0.0
-      dart_task:
-        dartanalyzer: --fatal-warnings .
+    - stage: analyze_and_format
+      name: "Analyzer"
+      dart: dev
+      os: linux
+      script: dartanalyzer --enable-experiment=non-nullable --fatal-warnings --fatal-infos .
+    - stage: analyze_and_format
+      name: "Format"
+      dart: dev
+      os: linux
+      script: dartfmt -n --set-exit-if-changed .
+    - stage: test
+      name: "Vm Tests"
+      dart: dev
+      os: linux
+      script: pub run --enable-experiment=non-nullable test -p vm
+
+stages:
+  - analyze_and_format
+  - test
 
 # Only building master means that we don't run two builds for each pull request.
 branches:
-  only: [master]
+  only: [master, null_safety]
 
 cache:
   directories:
diff --git a/lib/src/chain.dart b/lib/src/chain.dart
index 7f5ee76..ba6fa40 100644
--- a/lib/src/chain.dart
+++ b/lib/src/chain.dart
@@ -82,7 +82,7 @@
     }
 
     if (!when) {
-      late void Function(Object, StackTrace) newOnError;
+      void Function(Object, StackTrace)? newOnError;
       if (onError != null) {
         void wrappedOnError(Object error, StackTrace? stackTrace) {
           onError(
diff --git a/test/chain/dart2js_test.dart b/test/chain/dart2js_test.dart
index 78fd37a..c0ec913 100644
--- a/test/chain/dart2js_test.dart
+++ b/test/chain/dart2js_test.dart
@@ -146,7 +146,7 @@
         }, onError: (error, chain) {
           expect(error, equals('error'));
           expect(chain.traces, hasLength(2));
-          throw error as Object;
+          throw error;
         });
       }, onError: (error, chain) {
         try {
diff --git a/test/chain/vm_test.dart b/test/chain/vm_test.dart
index 90e7f4b..273276e 100644
--- a/test/chain/vm_test.dart
+++ b/test/chain/vm_test.dart
@@ -241,7 +241,7 @@
           expect(error, equals('error'));
           expect(chain.traces[1].frames,
               contains(frameMember(startsWith('inMicrotask'))));
-          throw error as Object;
+          throw error;
         });
       }, onError: (error, chain) {
         try {