[file_selector] Allow empty type groups (#3261)

This was restricted under the assumption that there was no reason for an empty group to exist, but that's not actually true; on platforms with selectable groups in the native UI, it may be useful to provide specific options as well as a fallback option (e.g., "Text files" and "All files").
diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md
index 0d8803f..3663064 100644
--- a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md
+++ b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.1
+
+* Allow type groups that allow any file.
+
 ## 1.0.0
 
 * Initial release.
diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart
index a7d52a7..fb591f2 100644
--- a/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart
+++ b/packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart
@@ -5,18 +5,16 @@
 /// A set of allowed XTypes
 class XTypeGroup {
   /// Creates a new group with the given label and file extensions.
+  ///
+  /// A group with none of the type options provided indicates that any type is
+  /// allowed.
   XTypeGroup({
     this.label,
     this.extensions,
     this.mimeTypes,
     this.macUTIs,
     this.webWildCards,
-  }) : assert(
-            !((extensions == null || extensions.isEmpty) &&
-                (mimeTypes == null || mimeTypes.isEmpty) &&
-                (macUTIs == null || macUTIs.isEmpty) &&
-                (webWildCards == null || webWildCards.isEmpty)),
-            "At least one type must be provided for an XTypeGroup.");
+  });
 
   /// The 'name' or reference to this group of types
   final String label;
diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml
index 015762a..ca5c2bd 100644
--- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml
+++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml
@@ -3,7 +3,7 @@
 homepage: https://github.com/flutter/plugins/tree/master/packages/file_selector/file_selector_platform_interface
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 1.0.0
+version: 1.0.1
 
 dependencies:
   flutter:
diff --git a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart
index 877e530..bde89f4 100644
--- a/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart
+++ b/packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart
@@ -7,10 +7,6 @@
 
 void main() {
   group('XTypeGroup', () {
-    test('fails assertion with no parameters set', () {
-      expect(() => XTypeGroup(), throwsAssertionError);
-    });
-
     test('toJSON() creates correct map', () {
       final label = 'test group';
       final extensions = ['.txt', '.jpg'];
@@ -33,5 +29,17 @@
       expect(jsonMap['macUTIs'], macUTIs);
       expect(jsonMap['webWildCards'], webWildCards);
     });
+
+    test('A wildcard group can be created', () {
+      final group = XTypeGroup(
+        label: 'Any',
+      );
+
+      final jsonMap = group.toJSON();
+      expect(jsonMap['extensions'], null);
+      expect(jsonMap['mimeTypes'], null);
+      expect(jsonMap['macUTIs'], null);
+      expect(jsonMap['webWildCards'], null);
+    });
   });
 }