[file_selector] Return a non-null value from getSavePath on web (#3630)

diff --git a/packages/file_selector/file_selector_web/CHANGELOG.md b/packages/file_selector/file_selector_web/CHANGELOG.md
index 4caad4b..3eb7c3b 100644
--- a/packages/file_selector/file_selector_web/CHANGELOG.md
+++ b/packages/file_selector/file_selector_web/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 0.8.1
+
+- Return a non-null value from `getSavePath` for consistency with
+  API expectations that null indicates canceling.
+
 # 0.8.0
 
 - Migrated to null-safety
diff --git a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart
index 5442fed..ea9569b 100644
--- a/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart
+++ b/packages/file_selector/file_selector_web/example/integration_test/file_selector_web_test.dart
@@ -73,6 +73,14 @@
         expect(await files[1].lastModified(), isNotNull);
       });
     });
+
+    group('getSavePath', () {
+      testWidgets('returns non-null', (WidgetTester _) async {
+        final plugin = FileSelectorWeb();
+        final savePath = plugin.getSavePath();
+        expect(await savePath, isNotNull);
+      });
+    });
   });
 }
 
diff --git a/packages/file_selector/file_selector_web/lib/file_selector_web.dart b/packages/file_selector/file_selector_web/lib/file_selector_web.dart
index 1c411ca..cf95e40 100644
--- a/packages/file_selector/file_selector_web/lib/file_selector_web.dart
+++ b/packages/file_selector/file_selector_web/lib/file_selector_web.dart
@@ -45,6 +45,9 @@
     return _openFiles(acceptedTypeGroups: acceptedTypeGroups, multiple: true);
   }
 
+  // This is intended to be passed to XFile, which ignores the path, but 'null'
+  // indicates a canceled save on other platforms, so provide a non-null dummy
+  // value.
   @override
   Future<String?> getSavePath({
     List<XTypeGroup>? acceptedTypeGroups,
@@ -52,7 +55,7 @@
     String? suggestedName,
     String? confirmButtonText,
   }) async =>
-      null;
+      '';
 
   @override
   Future<String?> getDirectoryPath({
diff --git a/packages/file_selector/file_selector_web/pubspec.yaml b/packages/file_selector/file_selector_web/pubspec.yaml
index 55424a7..17f0f47 100644
--- a/packages/file_selector/file_selector_web/pubspec.yaml
+++ b/packages/file_selector/file_selector_web/pubspec.yaml
@@ -1,7 +1,7 @@
 name: file_selector_web
 description: Web platform implementation of file_selector
 homepage: https://github.com/flutter/plugins/tree/master/packages/file_selector/file_selector_web
-version: 0.8.0
+version: 0.8.1
 
 flutter:
   plugin: