[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);
+ });
});
}