Skip to content

Commit fce905f

Browse files
stuartmorgan-gmauricioluz
authored andcommitted
[file_selector] Add allowsAny to XTypeGroup (flutter#6094)
1 parent 284a327 commit fce905f

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

packages/file_selector/file_selector_platform_interface/CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
## NEXT
1+
## 2.1.0
22

3-
* Removes unnecessary imports.
3+
* Adds `allowsAny` to `XTypeGroup` as a simple and future-proof way of identifying
4+
wildcard groups.
45

56
## 2.0.4
67

packages/file_selector/file_selector_platform_interface/lib/src/types/x_type_group/x_type_group.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ class XTypeGroup {
4242
};
4343
}
4444

45+
/// True if this type group should allow any file.
46+
bool get allowsAny {
47+
return (extensions?.isEmpty ?? true) &&
48+
(mimeTypes?.isEmpty ?? true) &&
49+
(macUTIs?.isEmpty ?? true) &&
50+
(webWildCards?.isEmpty ?? true);
51+
}
52+
4553
static List<String>? _removeLeadingDots(List<String>? exts) => exts
4654
?.map((String ext) => ext.startsWith('.') ? ext.substring(1) : ext)
4755
.toList();

packages/file_selector/file_selector_platform_interface/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22
55
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
66
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
7-
version: 2.0.4
7+
version: 2.1.0
88

99
environment:
1010
sdk: ">=2.12.0 <3.0.0"

packages/file_selector/file_selector_platform_interface/test/x_type_group_test.dart

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,35 @@ void main() {
4040
expect(jsonMap['mimeTypes'], null);
4141
expect(jsonMap['macUTIs'], null);
4242
expect(jsonMap['webWildCards'], null);
43+
expect(group.allowsAny, true);
44+
});
45+
46+
test('allowsAny treats empty arrays the same as null', () {
47+
final XTypeGroup group = XTypeGroup(
48+
label: 'Any',
49+
extensions: <String>[],
50+
mimeTypes: <String>[],
51+
macUTIs: <String>[],
52+
webWildCards: <String>[],
53+
);
54+
55+
expect(group.allowsAny, true);
56+
});
57+
58+
test('allowsAny returns false if anything is set', () {
59+
final XTypeGroup extensionOnly =
60+
XTypeGroup(label: 'extensions', extensions: <String>['txt']);
61+
final XTypeGroup mimeOnly =
62+
XTypeGroup(label: 'mime', mimeTypes: <String>['text/plain']);
63+
final XTypeGroup utiOnly =
64+
XTypeGroup(label: 'utis', macUTIs: <String>['public.text']);
65+
final XTypeGroup webOnly =
66+
XTypeGroup(label: 'web', webWildCards: <String>['.txt']);
67+
68+
expect(extensionOnly.allowsAny, false);
69+
expect(mimeOnly.allowsAny, false);
70+
expect(utiOnly.allowsAny, false);
71+
expect(webOnly.allowsAny, false);
4372
});
4473

4574
test('Leading dots are removed from extensions', () {

0 commit comments

Comments
 (0)