diff --git a/Dockerfile b/Dockerfile
index 115bcff..4ee5e79 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -6,7 +6,7 @@
 # To retrieve this value, please run the following in your closest shell:
 #
 # $ (cd flutter && git rev-parse HEAD)
-ARG FLUTTER_COMMIT=198df796aa80073ef22bdf249e614e2ff33c6895
+ARG FLUTTER_COMMIT=022b333a089afb81c471ec43d1f1f4f26305d876
 
 # We install unzip and remove the apt-index again to keep the
 # docker image diff small.
diff --git a/cloud_run.Dockerfile b/cloud_run.Dockerfile
index 17877fa..168cd62 100644
--- a/cloud_run.Dockerfile
+++ b/cloud_run.Dockerfile
@@ -6,7 +6,7 @@
 # To retrieve this value, please run the following in your closest shell:
 #
 # $ (cd flutter && git rev-parse HEAD)
-ARG FLUTTER_COMMIT=198df796aa80073ef22bdf249e614e2ff33c6895
+ARG FLUTTER_COMMIT=022b333a089afb81c471ec43d1f1f4f26305d876
 
 # We install unzip and remove the apt-index again to keep the
 # docker image diff small.
diff --git a/example/pubspec.lock b/example/pubspec.lock
index 04607c3..957383a 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -49,14 +49,14 @@
       name: build
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.5.0"
+    version: "1.5.1"
   build_config:
     dependency: transitive
     description:
       name: build_config
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.2"
+    version: "0.4.3"
   build_daemon:
     dependency: transitive
     description:
@@ -84,14 +84,14 @@
       name: build_runner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.10.4"
+    version: "1.10.6"
   build_runner_core:
     dependency: transitive
     description:
       name: build_runner_core
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "6.0.3"
+    version: "6.1.1"
   build_web_compilers:
     dependency: "direct dev"
     description:
@@ -259,7 +259,7 @@
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.3"
+    version: "1.2.4"
   mime:
     dependency: transitive
     description:
diff --git a/flutter b/flutter
index 198df79..022b333 160000
--- a/flutter
+++ b/flutter
@@ -1 +1 @@
-Subproject commit 198df796aa80073ef22bdf249e614e2ff33c6895
+Subproject commit 022b333a089afb81c471ec43d1f1f4f26305d876
diff --git a/lib/src/common.dart b/lib/src/common.dart
index 27e0be8..a5fd1a1 100644
--- a/lib/src/common.dart
+++ b/lib/src/common.dart
@@ -38,7 +38,7 @@
 
 void main() {
   print("hello");
-  querySelector('#foo').text = 'bar';
+  querySelector('#foo')?.text = 'bar';
 }
 """;
 
@@ -83,7 +83,7 @@
 
 main() async {
   print("hello");
-  querySelector('#foo').text = 'bar';
+  querySelector('#foo')?.text = 'bar';
   var foo = await HttpRequest.getString('http://www.google.com');
   print(foo);
 }
diff --git a/lib/src/flutter_web.dart b/lib/src/flutter_web.dart
index 8458400..10dabd0 100644
--- a/lib/src/flutter_web.dart
+++ b/lib/src/flutter_web.dart
@@ -171,8 +171,11 @@
   static const String _samplePackageName = 'dartpad_sample';
 
   static String createPubspec(bool includeFlutterWeb) {
+    // Mark the samples as not null safe.
     var content = '''
 name: $_samplePackageName
+environment:
+  sdk: '>=2.10.0 <3.0.0'
 ''';
 
     if (includeFlutterWeb) {
diff --git a/pubspec.lock b/pubspec.lock
index abf165c..c6b5b39 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -357,7 +357,7 @@
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.3"
+    version: "1.2.4"
   mime:
     dependency: transitive
     description:
diff --git a/test/compiler_test.dart b/test/compiler_test.dart
index 2f92115..ae09202 100644
--- a/test/compiler_test.dart
+++ b/test/compiler_test.dart
@@ -27,137 +27,105 @@
       await compiler.dispose();
     });
 
-    test('simple', () {
-      return compiler.compile(sampleCode).then((CompilationResults result) {
-        print(result.problems);
+    test('simple', () async {
+      final result = await compiler.compile(sampleCode);
+      print(result.problems);
 
-        expect(result.success, true);
-        expect(result.compiledJS, isNotEmpty);
-        expect(result.sourceMap, isNull);
-      });
+      expect(result.success, true);
+      expect(result.compiledJS, isNotEmpty);
+      expect(result.sourceMap, isNull);
     });
 
-    test('compileDDC simple', () {
-      return compiler
-          .compileDDC(sampleCode)
-          .then((DDCCompilationResults result) {
-        expect(result.success, true);
-        expect(result.compiledJS, isNotEmpty);
-        expect(result.modulesBaseUrl, isNotEmpty);
+    test('compileDDC simple', () async {
+      final result = await compiler.compileDDC(sampleCode);
+      expect(result.success, true);
+      expect(result.compiledJS, isNotEmpty);
+      expect(result.modulesBaseUrl, isNotEmpty);
 
-        expect(result.compiledJS, contains("define('dartpad_main', ["));
-      });
+      expect(result.compiledJS, contains("define('dartpad_main', ["));
     });
 
-    test('compileDDC with web', () {
-      return compiler
-          .compileDDC(sampleCodeWeb)
-          .then((DDCCompilationResults result) {
-        expect(result.success, true);
-        expect(result.compiledJS, isNotEmpty);
-        expect(result.modulesBaseUrl, isNotEmpty);
+    test('compileDDC with web', () async {
+      final result = await compiler.compileDDC(sampleCodeWeb);
+      expect(result.success, true);
+      expect(result.compiledJS, isNotEmpty);
+      expect(result.modulesBaseUrl, isNotEmpty);
 
-        expect(result.compiledJS, contains("define('dartpad_main', ["));
-      });
+      expect(result.compiledJS, contains("define('dartpad_main', ["));
     });
 
-    test('compileDDC with Flutter', () {
-      return compiler
-          .compileDDC(sampleCodeFlutter)
-          .then((DDCCompilationResults result) {
-        print(result.problems);
+    test('compileDDC with Flutter', () async {
+      final result = await compiler.compileDDC(sampleCodeFlutter);
+      print(result.problems);
 
-        expect(result.success, true);
-        expect(result.compiledJS, isNotEmpty);
-        expect(result.modulesBaseUrl, isNotEmpty);
+      expect(result.success, true);
+      expect(result.compiledJS, isNotEmpty);
+      expect(result.modulesBaseUrl, isNotEmpty);
 
-        expect(result.compiledJS, contains("define('dartpad_main', ["));
-      });
+      expect(result.compiledJS, contains("define('dartpad_main', ["));
     });
 
-    test('compileDDC with async', () {
-      return compiler
-          .compileDDC(sampleCodeAsync)
-          .then((DDCCompilationResults result) {
-        expect(result.success, true);
-        expect(result.compiledJS, isNotEmpty);
-        expect(result.modulesBaseUrl, isNotEmpty);
+    test('compileDDC with async', () async {
+      final result = await compiler.compileDDC(sampleCodeAsync);
+      expect(result.success, true);
+      expect(result.compiledJS, isNotEmpty);
+      expect(result.modulesBaseUrl, isNotEmpty);
 
-        expect(result.compiledJS, contains("define('dartpad_main', ["));
-      });
+      expect(result.compiledJS, contains("define('dartpad_main', ["));
     });
 
-    test('compileDDC with single error', () {
-      return compiler
-          .compileDDC(sampleCodeError)
-          .then((DDCCompilationResults result) {
-        expect(result.success, false);
-        expect(result.problems.length, 1);
-        expect(result.problems[0].toString(),
-            contains('Error: Expected \';\' after this.'));
-      });
+    test('compileDDC with single error', () async {
+      final result = await compiler.compileDDC(sampleCodeError);
+      expect(result.success, false);
+      expect(result.problems.length, 1);
+      expect(result.problems[0].toString(),
+          contains('Error: Expected \';\' after this.'));
     });
 
-    test('compileDDC with multiple errors', () {
-      return compiler
-          .compileDDC(sampleCodeErrors)
-          .then((DDCCompilationResults result) {
-        expect(result.success, false);
-        expect(result.problems.length, 1);
-        expect(result.problems[0].toString(),
-            contains('Error: Method not found: \'print1\'.'));
-        expect(result.problems[0].toString(),
-            contains('Error: Method not found: \'print2\'.'));
-        expect(result.problems[0].toString(),
-            contains('Error: Method not found: \'print3\'.'));
-      });
+    test('compileDDC with multiple errors', () async {
+      final result = await compiler.compileDDC(sampleCodeErrors);
+      expect(result.success, false);
+      expect(result.problems.length, 1);
+      expect(result.problems[0].toString(),
+          contains('Error: Method not found: \'print1\'.'));
+      expect(result.problems[0].toString(),
+          contains('Error: Method not found: \'print2\'.'));
+      expect(result.problems[0].toString(),
+          contains('Error: Method not found: \'print3\'.'));
     });
 
-    test('sourcemap', () {
-      return compiler
-          .compile(sampleCode, returnSourceMap: true)
-          .then((CompilationResults result) {
-        expect(result.success, true);
-        expect(result.compiledJS, isNotEmpty);
-        expect(result.sourceMap, isNotNull);
-        expect(result.sourceMap, isNotEmpty);
-      });
+    test('sourcemap', () async {
+      final result = await compiler.compile(sampleCode, returnSourceMap: true);
+      expect(result.success, true);
+      expect(result.compiledJS, isNotEmpty);
+      expect(result.sourceMap, isNotNull);
+      expect(result.sourceMap, isNotEmpty);
     });
 
-    test('version', () {
-      return compiler
-          .compile(sampleCode, returnSourceMap: true)
-          .then((CompilationResults result) {
-        expect(result.sourceMap, isNotNull);
-        expect(result.sourceMap, isNotEmpty);
-      });
+    test('version', () async {
+      final result = await compiler.compile(sampleCode, returnSourceMap: true);
+      expect(result.sourceMap, isNotNull);
+      expect(result.sourceMap, isNotEmpty);
     });
 
-    test('simple web', () {
-      return compiler.compile(sampleCodeWeb).then((CompilationResults result) {
-        expect(result.success, true);
-      });
+    test('simple web', () async {
+      final result = await compiler.compile(sampleCodeWeb);
+      expect(result.success, true);
     });
 
-    test('web async', () {
-      return compiler
-          .compile(sampleCodeAsync)
-          .then((CompilationResults result) {
-        expect(result.success, true);
-      });
+    test('web async', () async {
+      final result = await compiler.compile(sampleCodeAsync);
+      expect(result.success, true);
     });
 
-    test('errors', () {
-      return compiler
-          .compile(sampleCodeError)
-          .then((CompilationResults result) {
-        expect(result.success, false);
-        expect(result.problems.length, 1);
-        expect(result.problems[0].toString(), contains('Error: Expected'));
-      });
+    test('errors', () async {
+      final result = await compiler.compile(sampleCodeError);
+      expect(result.success, false);
+      expect(result.problems.length, 1);
+      expect(result.problems[0].toString(), contains('Error: Expected'));
     });
 
-    test('good import', () {
+    test('good import', () async {
       const code = '''
 import 'dart:html';
 
@@ -167,31 +135,28 @@
 }
 
 ''';
-      return compiler.compile(code).then((CompilationResults result) {
-        expect(result.problems.length, 0);
-      });
+      final result = await compiler.compile(code);
+      expect(result.problems.length, 0);
     });
 
-    test('bad import - local', () {
+    test('bad import - local', () async {
       const code = '''
 import 'foo.dart';
 void main() { missingMethod ('foo'); }
 ''';
-      return compiler.compile(code).then((CompilationResults result) {
-        expect(result.problems.first.message,
-            equals('unsupported import: foo.dart'));
-      });
+      final result = await compiler.compile(code);
+      expect(result.problems.first.message,
+          equals('unsupported import: foo.dart'));
     });
 
-    test('bad import - http', () {
+    test('bad import - http', () async {
       const code = '''
 import 'http://example.com';
 void main() { missingMethod ('foo'); }
 ''';
-      return compiler.compile(code).then((CompilationResults result) {
-        expect(result.problems.first.message,
-            equals('unsupported import: http://example.com'));
-      });
+      final result = await compiler.compile(code);
+      expect(result.problems.first.message,
+          equals('unsupported import: http://example.com'));
     });
 
     test('disallow compiler warnings', () async {
@@ -199,22 +164,18 @@
       expect(result.success, false);
     });
 
-    test('transitive errors', () {
+    test('transitive errors', () async {
       const code = '''
 import 'dart:foo';
 void main() { print ('foo'); }
 ''';
-      return compiler.compile(code).then((CompilationResults result) {
-        expect(result.problems.length, 1);
-      });
+      final result = await compiler.compile(code);
+      expect(result.problems.length, 1);
     });
 
-    test('errors for dart 2', () {
-      return compiler
-          .compile(sampleDart2Error)
-          .then((CompilationResults result) {
-        expect(result.problems.length, 1);
-      });
+    test('errors for dart 2', () async {
+      final result = await compiler.compile(sampleDart2Error);
+      expect(result.problems.length, 1);
     });
   });
 }
