diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md index 100b6ad136a7..b1fa45b708d5 100644 --- a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md +++ b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.1.0 -* Removes unnecessary imports. +* Adds `allowsAny` to `XTypeGroup` as a simple and future-proof way of identifying + wildcard groups. ## 2.0.4 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 2146131023e1..506dc1ce2de9 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 @@ -42,6 +42,14 @@ class XTypeGroup { }; } + /// True if this type group should allow any file. + bool get allowsAny { + return (extensions?.isEmpty ?? true) && + (mimeTypes?.isEmpty ?? true) && + (macUTIs?.isEmpty ?? true) && + (webWildCards?.isEmpty ?? true); + } + static List? _removeLeadingDots(List? exts) => exts ?.map((String ext) => ext.startsWith('.') ? ext.substring(1) : ext) .toList(); diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml index 81ad53a8bab2..4ba84782d436 100644 --- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml +++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 # 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: 2.0.4 +version: 2.1.0 environment: sdk: ">=2.12.0 <3.0.0" 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 84f5ca1f0bd2..e09605c109c5 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 @@ -40,6 +40,35 @@ void main() { expect(jsonMap['mimeTypes'], null); expect(jsonMap['macUTIs'], null); expect(jsonMap['webWildCards'], null); + expect(group.allowsAny, true); + }); + + test('allowsAny treats empty arrays the same as null', () { + final XTypeGroup group = XTypeGroup( + label: 'Any', + extensions: [], + mimeTypes: [], + macUTIs: [], + webWildCards: [], + ); + + expect(group.allowsAny, true); + }); + + test('allowsAny returns false if anything is set', () { + final XTypeGroup extensionOnly = + XTypeGroup(label: 'extensions', extensions: ['txt']); + final XTypeGroup mimeOnly = + XTypeGroup(label: 'mime', mimeTypes: ['text/plain']); + final XTypeGroup utiOnly = + XTypeGroup(label: 'utis', macUTIs: ['public.text']); + final XTypeGroup webOnly = + XTypeGroup(label: 'web', webWildCards: ['.txt']); + + expect(extensionOnly.allowsAny, false); + expect(mimeOnly.allowsAny, false); + expect(utiOnly.allowsAny, false); + expect(webOnly.allowsAny, false); }); test('Leading dots are removed from extensions', () {