diff --git a/.travis.yml b/.travis.yml
index 5afa17a..fc70ed4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,34 +1,30 @@
 language: dart
 
 dart:
-  - 2.0.0
   - dev
 
-dart_task:
-  - test: --platform vm,chrome
-
-matrix:
+jobs:
   include:
-  # Run tests on mac and windows – but just dev SDKs, no browser
   - dart: dev
-    dart_task: test
+    script: pub run --enable-experiment=non-nullable test
+    os: linux
+  - dart: dev
+    script: pub run --enable-experiment=non-nullable test
     os: windows
   - dart: dev
-    dart_task: test
+    script: pub run --enable-experiment=non-nullable test
     os: osx
-  # Only validate formatting using the dev release
+  - dart_task: dartfmt
+  - dart_task:
+      dartanalyzer: --enable-experiment=non-nullable --fatal-infos --fatal-warnings .
   - dart: dev
-    dart_task: dartfmt
-  - dart: dev
-    dart_task:
-      dartanalyzer: --fatal-infos --fatal-warnings .
-  - dart: 2.0.0
-    dart_task:
-      dartanalyzer: --fatal-warnings .
+    script: pub run --enable-experiment=non-nullable test -p chrome
+    os: linux
 
 # Only building master means that we don't run two builds for each pull request.
+# Temporarily adding `null_safety`
 branches:
-  only: [master]
+  only: [master, null_safety]
 
 cache:
  directories:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c962e1..5c64f66 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,6 @@
-## 1.7.1-dev
+## 1.8.0-nullsafety
+
+* Migrate to null safety.
 
 ## 1.7.0
 
diff --git a/analysis_options.yaml b/analysis_options.yaml
index ffabc48..743c74b 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -4,6 +4,9 @@
   strong-mode:
     implicit-casts: false
 
+  enable-experiment:
+    - non-nullable
+
 linter:
   rules:
     - avoid_catching_errors
diff --git a/benchmark/benchmark.dart b/benchmark/benchmark.dart
index a7fbb7a..fe1e522 100644
--- a/benchmark/benchmark.dart
+++ b/benchmark/benchmark.dart
@@ -32,14 +32,14 @@
 };
 
 /// The command line arguments passed to this script.
-List<String> arguments;
+late final List<String> arguments;
 
 void main(List<String> args) {
   arguments = args;
 
   for (var style in [p.Style.posix, p.Style.url, p.Style.windows]) {
     final context = p.Context(style: style);
-    final files = genericPaths.toList()..addAll(platformPaths[style]);
+    final files = <String>[...genericPaths, ...platformPaths[style]!];
 
     void benchmark(String name, Function function) {
       runBenchmark('${style.name}-$name', 100000, () {
diff --git a/build.yaml b/build.yaml
new file mode 100644
index 0000000..340d63c
--- /dev/null
+++ b/build.yaml
@@ -0,0 +1,13 @@
+# See https://github.com/dart-lang/build/tree/master/build_web_compilers#configuration
+# Matches previous configuration in pubspec.yaml - transformers - $dart2js
+targets:
+  $default:
+    builders:
+      build_web_compilers|entrypoint:
+        # These are globs for the entrypoints you want to compile.
+        generate_for:
+          include:
+          - test/**.dart
+          exclude:
+          - test/io_test.dart
+          - test/**vm_test.dart
diff --git a/lib/path.dart b/lib/path.dart
index 5ce50d6..a4a8be9 100644
--- a/lib/path.dart
+++ b/lib/path.dart
@@ -72,13 +72,13 @@
   try {
     uri = Uri.base;
   } on Exception {
-    if (_current != null) return _current;
+    if (_current != null) return _current!;
     rethrow;
   }
 
   // Converting the base URI to a file path is pretty slow, and the base URI
   // rarely changes in practice, so we cache the result here.
-  if (uri == _currentUriBase) return _current;
+  if (uri == _currentUriBase) return _current!;
   _currentUriBase = uri;
 
   if (Style.platform == Style.url) {
@@ -91,19 +91,19 @@
     assert(path[lastIndex] == '/' || path[lastIndex] == '\\');
     _current = lastIndex == 0 ? path : path.substring(0, lastIndex);
   }
-  return _current;
+  return _current!;
 }
 
 /// The last value returned by [Uri.base].
 ///
 /// This is used to cache the current working directory.
-Uri _currentUriBase;
+Uri? _currentUriBase;
 
 /// The last known value of the current working directory.
 ///
 /// This is cached because [current] is called frequently but rarely actually
 /// changes.
-String _current;
+String? _current;
 
 /// Gets the path separator for the current platform. This is `\` on Windows
 /// and `/` on other platforms (including the browser).
@@ -117,12 +117,12 @@
 ///
 /// Does not [normalize] or [canonicalize] paths.
 String absolute(String part1,
-        [String part2,
-        String part3,
-        String part4,
-        String part5,
-        String part6,
-        String part7]) =>
+        [String? part2,
+        String? part3,
+        String? part4,
+        String? part5,
+        String? part6,
+        String? part7]) =>
     context.absolute(part1, part2, part3, part4, part5, part6, part7);
 
 /// Gets the part of [path] after the last separator.
@@ -255,13 +255,13 @@
 ///
 ///     p.join('path', '/to', 'foo'); // -> '/to/foo'
 String join(String part1,
-        [String part2,
-        String part3,
-        String part4,
-        String part5,
-        String part6,
-        String part7,
-        String part8]) =>
+        [String? part2,
+        String? part3,
+        String? part4,
+        String? part5,
+        String? part6,
+        String? part7,
+        String? part8]) =>
     context.join(part1, part2, part3, part4, part5, part6, part7, part8);
 
 /// Joins the given path parts into a single path using the current platform's
@@ -355,7 +355,7 @@
 ///     // URL
 ///     p.relative('https://dart.dev', from: 'https://pub.dev');
 ///       // -> 'https://dart.dev'
-String relative(String path, {String from}) =>
+String relative(String path, {String? from}) =>
     context.relative(path, from: from);
 
 /// Returns `true` if [child] is a path beneath `parent`, and `false` otherwise.
diff --git a/lib/src/context.dart b/lib/src/context.dart
index 21a7835..f0945e4 100644
--- a/lib/src/context.dart
+++ b/lib/src/context.dart
@@ -25,7 +25,7 @@
   ///
   /// On the browser, [style] defaults to [Style.url] and [current] defaults to
   /// the current URL.
-  factory Context({Style style, String current}) {
+  factory Context({Style? style, String? current}) {
     if (current == null) {
       if (style == null) {
         current = p.current;
@@ -56,7 +56,7 @@
 
   /// The current directory given when Context was created. If null, current
   /// directory is evaluated from 'p.current'.
-  final String _current;
+  final String? _current;
 
   /// The current directory that relative paths are relative to.
   String get current => _current ?? p.current;
@@ -75,12 +75,12 @@
   /// If [current] isn't absolute, this won't return an absolute path. Does not
   /// [normalize] or [canonicalize] paths.
   String absolute(String part1,
-      [String part2,
-      String part3,
-      String part4,
-      String part5,
-      String part6,
-      String part7]) {
+      [String? part2,
+      String? part3,
+      String? part4,
+      String? part5,
+      String? part6,
+      String? part7]) {
     _validateArgList(
         'absolute', [part1, part2, part3, part4, part5, part6, part7]);
 
@@ -222,14 +222,14 @@
   ///     context.join('path', '/to', 'foo'); // -> '/to/foo'
   ///
   String join(String part1,
-      [String part2,
-      String part3,
-      String part4,
-      String part5,
-      String part6,
-      String part7,
-      String part8]) {
-    final parts = <String>[
+      [String? part2,
+      String? part3,
+      String? part4,
+      String? part5,
+      String? part6,
+      String? part7,
+      String? part8]) {
+    final parts = <String?>[
       part1,
       part2,
       part3,
@@ -240,7 +240,7 @@
       part8
     ];
     _validateArgList('join', parts);
-    return joinAll(parts.where((part) => part != null));
+    return joinAll(parts.whereType<String>());
   }
 
   /// Joins the given path parts into a single path. Example:
@@ -270,7 +270,7 @@
         final path = buffer.toString();
         parsed.root =
             path.substring(0, style.rootLength(path, withDrive: true));
-        if (style.needsSeparator(parsed.root)) {
+        if (style.needsSeparator(parsed.root!)) {
           parsed.separators[0] = style.separator;
         }
         buffer.clear();
@@ -325,7 +325,7 @@
     final parsed = _parse(path);
     // Filter out empty parts that exist due to multiple separators in a row.
     parsed.parts = parsed.parts.where((part) => part.isNotEmpty).toList();
-    if (parsed.root != null) parsed.parts.insert(0, parsed.root);
+    if (parsed.root != null) parsed.parts.insert(0, parsed.root!);
     return parsed.parts;
   }
 
@@ -370,8 +370,8 @@
   bool _needsNormalization(String path) {
     var start = 0;
     final codeUnits = path.codeUnits;
-    int previousPrevious;
-    int previous;
+    int? previousPrevious;
+    int? previous;
 
     // Skip past the root before we start looking for snippets that need
     // normalization. We want to normalize "//", but not when it's part of
@@ -464,7 +464,7 @@
   /// [from] to [path]. For example, if [current] and [path] are "." and [from]
   /// is "/", no path can be determined. In this case, a [PathException] will be
   /// thrown.
-  String relative(String path, {String from}) {
+  String relative(String path, {String? from}) {
     // Avoid expensive computation if the path is already relative.
     if (from == null && isRelative(path)) return normalize(path);
 
@@ -500,7 +500,7 @@
     // calculation of relative paths, even if a path has not been normalized.
     if (fromParsed.root != pathParsed.root &&
         ((fromParsed.root == null || pathParsed.root == null) ||
-            !style.pathsEqual(fromParsed.root, pathParsed.root))) {
+            !style.pathsEqual(fromParsed.root!, pathParsed.root!))) {
       return pathParsed.toString();
     }
 
@@ -647,7 +647,7 @@
     var lastCodeUnit = chars.slash;
 
     /// The index of the last separator in [parent].
-    int lastParentSeparator;
+    int? lastParentSeparator;
 
     // Iterate through both paths as long as they're semantically identical.
     var parentIndex = parentRootLength;
@@ -765,8 +765,7 @@
         lastParentSeparator ??= math.max(0, parentRootLength - 1);
       }
 
-      final direction =
-          _pathDirection(parent, lastParentSeparator ?? parentRootLength - 1);
+      final direction = _pathDirection(parent, lastParentSeparator);
       if (direction == _PathDirection.atRoot) return _PathRelation.equal;
       return direction == _PathDirection.aboveRoot
           ? _PathRelation.inconclusive
@@ -888,14 +887,14 @@
 
     final parsed = _parse(path);
     parsed.normalize();
-    return _hashFast(parsed.toString());
+    return _hashFast(parsed.toString())!;
   }
 
   /// An optimized implementation of [hash] that doesn't handle internal `..`
   /// components.
   ///
   /// This will handle `..` components that appear at the beginning of the path.
-  int _hashFast(String path) {
+  int? _hashFast(String path) {
     var hash = 4603;
     var beginning = true;
     var wasSeparator = true;
@@ -1082,7 +1081,7 @@
 
 /// Validates that there are no non-null arguments following a null one and
 /// throws an appropriate [ArgumentError] on failure.
-void _validateArgList(String method, List<String> args) {
+void _validateArgList(String method, List<String?> args) {
   for (var i = 1; i < args.length; i++) {
     // Ignore nulls hanging off the end.
     if (args[i] == null || args[i - 1] != null) continue;
diff --git a/lib/src/internal_style.dart b/lib/src/internal_style.dart
index dbf9098..3041143 100644
--- a/lib/src/internal_style.dart
+++ b/lib/src/internal_style.dart
@@ -43,7 +43,7 @@
   /// Gets the root prefix of [path] if path is absolute. If [path] is relative,
   /// returns `null`.
   @override
-  String getRoot(String path) {
+  String? getRoot(String path) {
     final length = rootLength(path);
     if (length > 0) return path.substring(0, length);
     return isRootRelative(path) ? path[0] : null;
diff --git a/lib/src/parsed_path.dart b/lib/src/parsed_path.dart
index 799a3bb..60fa849 100644
--- a/lib/src/parsed_path.dart
+++ b/lib/src/parsed_path.dart
@@ -13,7 +13,7 @@
   /// On POSIX systems, this will be `null` or "/". On Windows, it can be
   /// `null`, "//" for a UNC path, or something like "C:\" for paths with drive
   /// letters.
-  String root;
+  String? root;
 
   /// Whether this path is root-relative.
   ///
@@ -33,7 +33,7 @@
 
   /// The file extension of the last non-empty part, or "" if it doesn't have
   /// one.
-  String extension([int level]) => _splitExtension(level)[1];
+  String extension([int level = 1]) => _splitExtension(level)[1];
 
   /// `true` if this is an absolute path.
   bool get isAbsolute => root != null;
@@ -131,14 +131,14 @@
     parts = newParts;
     separators =
         List.filled(newParts.length + 1, style.separator, growable: true);
-    if (!isAbsolute || newParts.isEmpty || !style.needsSeparator(root)) {
+    if (!isAbsolute || newParts.isEmpty || !style.needsSeparator(root!)) {
       separators[0] = '';
     }
 
     // Normalize the Windows root if needed.
     if (root != null && style == Style.windows) {
-      if (canonicalize) root = root.toLowerCase();
-      root = root.replaceAll('/', '\\');
+      if (canonicalize) root = root!.toLowerCase();
+      root = root!.replaceAll('/', '\\');
     }
     removeTrailingSeparators();
   }
@@ -185,13 +185,13 @@
   /// Returns a two-element list. The first is the name of the file without any
   /// extension. The second is the extension or "" if it has none.
   List<String> _splitExtension([int level = 1]) {
-    if (level == null) throw ArgumentError.notNull('level');
     if (level <= 0) {
       throw RangeError.value(
           level, 'level', "level's value must be greater than 0");
     }
 
-    final file = parts.lastWhere((p) => p != '', orElse: () => null);
+    final file =
+        parts.cast<String?>().lastWhere((p) => p != '', orElse: () => null);
 
     if (file == null) return ['', ''];
     if (file == '..') return ['..', ''];
diff --git a/lib/src/path_map.dart b/lib/src/path_map.dart
index 99bea34..50f4d7e 100644
--- a/lib/src/path_map.dart
+++ b/lib/src/path_map.dart
@@ -7,12 +7,12 @@
 import '../path.dart' as p;
 
 /// A map whose keys are paths, compared using [p.equals] and [p.hash].
-class PathMap<V> extends MapView<String, V> {
+class PathMap<V> extends MapView<String?, V> {
   /// Creates an empty [PathMap] whose keys are compared using `context.equals`
   /// and `context.hash`.
   ///
   /// The [context] defaults to the current path context.
-  PathMap({p.Context context}) : super(_create(context));
+  PathMap({p.Context? context}) : super(_create(context));
 
   /// Creates a [PathMap] with the same keys and values as [other] whose keys
   /// are compared using `context.equals` and `context.hash`.
@@ -20,19 +20,19 @@
   /// The [context] defaults to the current path context. If multiple keys in
   /// [other] represent the same logical path, the last key's value will be
   /// used.
-  PathMap.of(Map<String, V> other, {p.Context context})
+  PathMap.of(Map<String, V> other, {p.Context? context})
       : super(_create(context)..addAll(other));
 
   /// Creates a map that uses [context] for equality and hashing.
-  static Map<String, V> _create<V>(p.Context context) {
+  static Map<String?, V> _create<V>(p.Context? context) {
     context ??= p.context;
     return LinkedHashMap(
         equals: (path1, path2) {
           if (path1 == null) return path2 == null;
           if (path2 == null) return false;
-          return context.equals(path1, path2);
+          return context!.equals(path1, path2);
         },
-        hashCode: (path) => path == null ? 0 : context.hash(path),
+        hashCode: (path) => path == null ? 0 : context!.hash(path),
         isValidKey: (path) => path is String || path == null);
   }
 }
diff --git a/lib/src/path_set.dart b/lib/src/path_set.dart
index 9670239..424c8a1 100644
--- a/lib/src/path_set.dart
+++ b/lib/src/path_set.dart
@@ -7,15 +7,15 @@
 import '../path.dart' as p;
 
 /// A set containing paths, compared using [p.equals] and [p.hash].
-class PathSet extends IterableBase<String> implements Set<String> {
+class PathSet extends IterableBase<String?> implements Set<String?> {
   /// The set to which we forward implementation methods.
-  final Set<String> _inner;
+  final Set<String?> _inner;
 
   /// Creates an empty [PathSet] whose contents are compared using
   /// `context.equals` and `context.hash`.
   ///
   /// The [context] defaults to the current path context.
-  PathSet({p.Context context}) : _inner = _create(context);
+  PathSet({p.Context? context}) : _inner = _create(context);
 
   /// Creates a [PathSet] with the same contents as [other] whose elements are
   /// compared using `context.equals` and `context.hash`.
@@ -23,19 +23,19 @@
   /// The [context] defaults to the current path context. If multiple elements
   /// in [other] represent the same logical path, the first value will be
   /// used.
-  PathSet.of(Iterable<String> other, {p.Context context})
+  PathSet.of(Iterable<String> other, {p.Context? context})
       : _inner = _create(context)..addAll(other);
 
   /// Creates a set that uses [context] for equality and hashing.
-  static Set<String> _create(p.Context context) {
+  static Set<String?> _create(p.Context? context) {
     context ??= p.context;
     return LinkedHashSet(
         equals: (path1, path2) {
           if (path1 == null) return path2 == null;
           if (path2 == null) return false;
-          return context.equals(path1, path2);
+          return context!.equals(path1, path2);
         },
-        hashCode: (path) => path == null ? 0 : context.hash(path),
+        hashCode: (path) => path == null ? 0 : context!.hash(path),
         isValidKey: (path) => path is String || path == null);
   }
 
@@ -44,16 +44,16 @@
   // it's so widely used that even brief version skew can be very painful.
 
   @override
-  Iterator<String> get iterator => _inner.iterator;
+  Iterator<String?> get iterator => _inner.iterator;
 
   @override
   int get length => _inner.length;
 
   @override
-  bool add(String value) => _inner.add(value);
+  bool add(String? value) => _inner.add(value);
 
   @override
-  void addAll(Iterable<String> elements) => _inner.addAll(elements);
+  void addAll(Iterable<String?> elements) => _inner.addAll(elements);
 
   @override
   Set<T> cast<T>() => _inner.cast<T>();
@@ -62,38 +62,38 @@
   void clear() => _inner.clear();
 
   @override
-  bool contains(Object element) => _inner.contains(element);
+  bool contains(Object? element) => _inner.contains(element);
 
   @override
-  bool containsAll(Iterable<Object> other) => _inner.containsAll(other);
+  bool containsAll(Iterable<Object?> other) => _inner.containsAll(other);
 
   @override
-  Set<String> difference(Set<Object> other) => _inner.difference(other);
+  Set<String?> difference(Set<Object?> other) => _inner.difference(other);
 
   @override
-  Set<String> intersection(Set<Object> other) => _inner.intersection(other);
+  Set<String?> intersection(Set<Object?> other) => _inner.intersection(other);
 
   @override
-  String lookup(Object element) => _inner.lookup(element);
+  String? lookup(Object? element) => _inner.lookup(element);
 
   @override
-  bool remove(Object value) => _inner.remove(value);
+  bool remove(Object? value) => _inner.remove(value);
 
   @override
-  void removeAll(Iterable<Object> elements) => _inner.removeAll(elements);
+  void removeAll(Iterable<Object?> elements) => _inner.removeAll(elements);
 
   @override
-  void removeWhere(bool Function(String) test) => _inner.removeWhere(test);
+  void removeWhere(bool Function(String?) test) => _inner.removeWhere(test);
 
   @override
-  void retainAll(Iterable<Object> elements) => _inner.retainAll(elements);
+  void retainAll(Iterable<Object?> elements) => _inner.retainAll(elements);
 
   @override
-  void retainWhere(bool Function(String) test) => _inner.retainWhere(test);
+  void retainWhere(bool Function(String?) test) => _inner.retainWhere(test);
 
   @override
-  Set<String> union(Set<String> other) => _inner.union(other);
+  Set<String?> union(Set<String?> other) => _inner.union(other);
 
   @override
-  Set<String> toSet() => _inner.toSet();
+  Set<String?> toSet() => _inner.toSet();
 }
diff --git a/lib/src/style.dart b/lib/src/style.dart
index d8b8ff1..e1b4fec 100644
--- a/lib/src/style.dart
+++ b/lib/src/style.dart
@@ -63,13 +63,13 @@
   Pattern get rootPattern;
 
   @Deprecated('Most Style members will be removed in path 2.0.')
-  Pattern get relativeRootPattern;
+  Pattern? get relativeRootPattern;
 
   @Deprecated('Most style members will be removed in path 2.0.')
-  String getRoot(String path);
+  String? getRoot(String path);
 
   @Deprecated('Most style members will be removed in path 2.0.')
-  String getRelativeRoot(String path);
+  String? getRelativeRoot(String path);
 
   @Deprecated('Most style members will be removed in path 2.0.')
   String pathFromUri(Uri uri);
diff --git a/lib/src/style/posix.dart b/lib/src/style/posix.dart
index f8b7e78..59c8d32 100644
--- a/lib/src/style/posix.dart
+++ b/lib/src/style/posix.dart
@@ -47,7 +47,7 @@
   bool isRootRelative(String path) => false;
 
   @override
-  String getRelativeRoot(String path) => null;
+  String? getRelativeRoot(String path) => null;
 
   @override
   String pathFromUri(Uri uri) {
diff --git a/lib/src/style/url.dart b/lib/src/style/url.dart
index 1f99bd5..9daccd7 100644
--- a/lib/src/style/url.dart
+++ b/lib/src/style/url.dart
@@ -79,7 +79,7 @@
       path.isNotEmpty && isSeparator(path.codeUnitAt(0));
 
   @override
-  String getRelativeRoot(String path) => isRootRelative(path) ? '/' : null;
+  String? getRelativeRoot(String path) => isRootRelative(path) ? '/' : null;
 
   @override
   String pathFromUri(Uri uri) => uri.toString();
diff --git a/lib/src/style/windows.dart b/lib/src/style/windows.dart
index 64d5a3f..3b7d98c 100644
--- a/lib/src/style/windows.dart
+++ b/lib/src/style/windows.dart
@@ -76,7 +76,7 @@
   bool isRootRelative(String path) => rootLength(path) == 1;
 
   @override
-  String getRelativeRoot(String path) {
+  String? getRelativeRoot(String path) {
     final length = rootLength(path);
     if (length == 1) return path[0];
     return null;
@@ -106,12 +106,12 @@
   @override
   Uri absolutePathToUri(String path) {
     final parsed = ParsedPath.parse(path, this);
-    if (parsed.root.startsWith(r'\\')) {
+    if (parsed.root!.startsWith(r'\\')) {
       // Network paths become "file://server/share/path/to/file".
 
       // The root is of the form "\\server\share". We want "server" to be the
       // URI host, and "share" to be the first element of the path.
-      final rootParts = parsed.root.split('\\').where((part) => part != '');
+      final rootParts = parsed.root!.split('\\').where((part) => part != '');
       parsed.parts.insert(0, rootParts.last);
 
       if (parsed.hasTrailingSeparator) {
@@ -136,7 +136,7 @@
       // Get rid of the trailing "\" in "C:\" because the URI constructor will
       // add a separator on its own.
       parsed.parts
-          .insert(0, parsed.root.replaceAll('/', '').replaceAll('\\', ''));
+          .insert(0, parsed.root!.replaceAll('/', '').replaceAll('\\', ''));
 
       return Uri(scheme: 'file', pathSegments: parsed.parts);
     }
diff --git a/pubspec.yaml b/pubspec.yaml
index 92a54f9..e25589c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: path
-version: 1.7.1-dev
+version: 1.8.0-nullsafety
 
 description: >-
   A string-based path manipulation library. All of the path operations you know
@@ -8,8 +8,88 @@
 homepage: https://github.com/dart-lang/path
 
 environment:
- sdk: '>=2.0.0 <3.0.0'
+ sdk: '>=2.9.0-18.0 <2.9.0'
 
 dev_dependencies:
   pedantic: ^1.0.0
   test: '>=0.12.42 <2.0.0'
+
+  build_runner: ^1.0.0
+  build_test: ^0.10.0
+  build_web_compilers: '>=1.2.0 <3.0.0'
+
+dependency_overrides:
+  async:
+    git:
+      url: git://github.com/dart-lang/async.git
+      ref: null_safety
+  boolean_selector:
+    git:
+      url: git://github.com/dart-lang/boolean_selector.git
+      ref: null_safety
+  charcode:
+    git:
+      url: git://github.com/dart-lang/charcode.git
+      ref: null_safety
+  collection: 1.15.0-nullsafety
+  js:
+    git:
+      url: git://github.com/dart-lang/sdk.git
+      ref: master
+      path: pkg/js
+  matcher:
+    git:
+      url: git://github.com/dart-lang/matcher.git
+      ref: null_safety
+  meta: 1.3.0-nullsafety
+  pedantic:
+    git:
+      url: git://github.com/dart-lang/pedantic.git
+      ref: null_safety
+  pool:
+    git:
+      url: git://github.com/dart-lang/pool.git
+      ref: null_safety
+  source_maps:
+    git:
+      url: git://github.com/dart-lang/source_maps.git
+      ref: null_safety
+  source_map_stack_trace:
+    git:
+      url: git://github.com/dart-lang/source_map_stack_trace.git
+      ref: null_safety
+  source_span:
+    git:
+      url: git://github.com/dart-lang/source_span.git
+      ref: null_safety
+  stack_trace:
+    git:
+      url: git://github.com/dart-lang/stack_trace.git
+      ref: null_safety
+  stream_channel:
+    git:
+      url: git://github.com/dart-lang/stream_channel.git
+      ref: null_safety
+  string_scanner:
+    git:
+      url: git://github.com/dart-lang/string_scanner.git
+      ref: null_safety
+  term_glyph:
+    git:
+      url: git://github.com/dart-lang/term_glyph.git
+      ref: null_safety
+  test_api:
+    git:
+      url: git://github.com/dart-lang/test.git
+      ref: null_safety
+      path: pkgs/test_api
+  test_core:
+    git:
+      url: git://github.com/dart-lang/test.git
+      ref: null_safety
+      path: pkgs/test_core
+  test:
+    git:
+      url: git://github.com/dart-lang/test.git
+      ref: null_safety
+      path: pkgs/test
diff --git a/test/posix_test.dart b/test/posix_test.dart
index 6b73145..8ade403 100644
--- a/test/posix_test.dart
+++ b/test/posix_test.dart
@@ -32,8 +32,6 @@
     expect(context.extension('a.b/c.d', 2), '.d');
     expect(() => context.extension(r'foo.bar.dart.js', 0), throwsRangeError);
     expect(() => context.extension(r'foo.bar.dart.js', -1), throwsRangeError);
-    expect(
-        () => context.extension(r'foo.bar.dart.js', null), throwsArgumentError);
   });
 
   test('rootPrefix', () {
@@ -183,7 +181,6 @@
 
     test('disallows intermediate nulls', () {
       expect(() => context.join('a', null, 'b'), throwsArgumentError);
-      expect(() => context.join(null, 'a'), throwsArgumentError);
     });
 
     test('join does not modify internal ., .., or trailing separators', () {
diff --git a/test/url_test.dart b/test/url_test.dart
index 143b602..cb2d4cb 100644
--- a/test/url_test.dart
+++ b/test/url_test.dart
@@ -253,7 +253,6 @@
 
     test('disallows intermediate nulls', () {
       expect(() => context.join('a', null, 'b'), throwsArgumentError);
-      expect(() => context.join(null, 'a'), throwsArgumentError);
     });
 
     test('does not modify internal ., .., or trailing separators', () {
diff --git a/test/windows_test.dart b/test/windows_test.dart
index ad3deb6..d658795 100644
--- a/test/windows_test.dart
+++ b/test/windows_test.dart
@@ -36,8 +36,6 @@
     expect(context.extension('a.b/c.d', 2), '.d');
     expect(() => context.extension(r'foo.bar.dart.js', 0), throwsRangeError);
     expect(() => context.extension(r'foo.bar.dart.js', -1), throwsRangeError);
-    expect(
-        () => context.extension(r'foo.bar.dart.js', null), throwsArgumentError);
   });
 
   test('rootPrefix', () {
@@ -248,7 +246,6 @@
 
     test('disallows intermediate nulls', () {
       expect(() => context.join('a', null, 'b'), throwsArgumentError);
-      expect(() => context.join(null, 'a'), throwsArgumentError);
     });
 
     test('join does not modify internal ., .., or trailing separators', () {
