[file_selector] Convert XTypeGroup to const (#6476)
diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md
index c4ee86a..ad1fe2c 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 @@
+## 2.2.0
+
+* Makes `XTypeGroup`'s constructor constant.
+
## 2.1.1
* Updates imports for `prefer_relative_imports`.
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 506dc1c..00cd565 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
@@ -1,37 +1,43 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'package:flutter/foundation.dart' show immutable;
-/// A set of allowed XTypes
+/// A set of allowed XTypes.
+@immutable
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({
+ const XTypeGroup({
this.label,
List<String>? extensions,
this.mimeTypes,
this.macUTIs,
this.webWildCards,
- }) : extensions = _removeLeadingDots(extensions);
+ }) : _extensions = extensions;
- /// The 'name' or reference to this group of types
+ /// The 'name' or reference to this group of types.
final String? label;
- /// The extensions for this group
- final List<String>? extensions;
-
- /// The MIME types for this group
+ /// The MIME types for this group.
final List<String>? mimeTypes;
- /// The UTIs for this group
+ /// The UTIs for this group.
final List<String>? macUTIs;
- /// The web wild cards for this group (ex: image/*, video/*)
+ /// The web wild cards for this group (ex: image/*, video/*).
final List<String>? webWildCards;
- /// Converts this object into a JSON formatted object
+ final List<String>? _extensions;
+
+ /// The extensions for this group.
+ List<String>? get extensions {
+ return _removeLeadingDots(_extensions);
+ }
+
+ /// Converts this object into a JSON formatted object.
Map<String, dynamic> toJSON() {
return <String, dynamic>{
'label': label,
diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml
index b01af35..c450006 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 @@
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.1.1
+version: 2.2.0
environment:
sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart
index 33f9fbf..0f5f3a1 100644
--- a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart
+++ b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart
@@ -26,14 +26,14 @@
group('#openFile', () {
test('passes the accepted type groups correctly', () async {
- final XTypeGroup group = XTypeGroup(
+ const XTypeGroup group = XTypeGroup(
label: 'text',
extensions: <String>['txt'],
mimeTypes: <String>['text/plain'],
macUTIs: <String>['public.text'],
);
- final XTypeGroup groupTwo = XTypeGroup(
+ const XTypeGroup groupTwo = XTypeGroup(
label: 'image',
extensions: <String>['jpg'],
mimeTypes: <String>['image/jpg'],
@@ -91,14 +91,14 @@
});
group('#openFiles', () {
test('passes the accepted type groups correctly', () async {
- final XTypeGroup group = XTypeGroup(
+ const XTypeGroup group = XTypeGroup(
label: 'text',
extensions: <String>['txt'],
mimeTypes: <String>['text/plain'],
macUTIs: <String>['public.text'],
);
- final XTypeGroup groupTwo = XTypeGroup(
+ const XTypeGroup groupTwo = XTypeGroup(
label: 'image',
extensions: <String>['jpg'],
mimeTypes: <String>['image/jpg'],
@@ -157,14 +157,14 @@
group('#getSavePath', () {
test('passes the accepted type groups correctly', () async {
- final XTypeGroup group = XTypeGroup(
+ const XTypeGroup group = XTypeGroup(
label: 'text',
extensions: <String>['txt'],
mimeTypes: <String>['text/plain'],
macUTIs: <String>['public.text'],
);
- final XTypeGroup groupTwo = XTypeGroup(
+ const XTypeGroup groupTwo = XTypeGroup(
label: 'image',
extensions: <String>['jpg'],
mimeTypes: <String>['image/jpg'],
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 e09605c..107cdc3 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
@@ -31,7 +31,7 @@
});
test('A wildcard group can be created', () {
- final XTypeGroup group = XTypeGroup(
+ const XTypeGroup group = XTypeGroup(
label: 'Any',
);
@@ -44,7 +44,7 @@
});
test('allowsAny treats empty arrays the same as null', () {
- final XTypeGroup group = XTypeGroup(
+ const XTypeGroup group = XTypeGroup(
label: 'Any',
extensions: <String>[],
mimeTypes: <String>[],
@@ -56,13 +56,13 @@
});
test('allowsAny returns false if anything is set', () {
- final XTypeGroup extensionOnly =
+ const XTypeGroup extensionOnly =
XTypeGroup(label: 'extensions', extensions: <String>['txt']);
- final XTypeGroup mimeOnly =
+ const XTypeGroup mimeOnly =
XTypeGroup(label: 'mime', mimeTypes: <String>['text/plain']);
- final XTypeGroup utiOnly =
+ const XTypeGroup utiOnly =
XTypeGroup(label: 'utis', macUTIs: <String>['public.text']);
- final XTypeGroup webOnly =
+ const XTypeGroup webOnly =
XTypeGroup(label: 'web', webWildCards: <String>['.txt']);
expect(extensionOnly.allowsAny, false);