Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 957ad55

Browse files
committed
Verify extensions are working.
1 parent 6879603 commit 957ad55

File tree

3 files changed

+44
-13
lines changed

3 files changed

+44
-13
lines changed

packages/file_selector/file_selector/lib/file_selector.dart

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Future<XFile> openFile({
1414
String initialDirectory,
1515
String confirmButtonText,
1616
}) {
17-
_verifyExtensions(acceptedTypeGroups);
17+
acceptedTypeGroups = _verifyTypeGroups(acceptedTypeGroups);
1818
return FileSelectorPlatform.instance.openFile(
1919
acceptedTypeGroups: acceptedTypeGroups,
2020
initialDirectory: initialDirectory,
@@ -27,7 +27,7 @@ Future<List<XFile>> openFiles({
2727
String initialDirectory,
2828
String confirmButtonText,
2929
}) {
30-
_verifyExtensions(acceptedTypeGroups);
30+
acceptedTypeGroups = _verifyTypeGroups(acceptedTypeGroups);
3131
return FileSelectorPlatform.instance.openFiles(
3232
acceptedTypeGroups: acceptedTypeGroups,
3333
initialDirectory: initialDirectory,
@@ -41,7 +41,7 @@ Future<String> getSavePath({
4141
String suggestedName,
4242
String confirmButtonText,
4343
}) async {
44-
_verifyExtensions(acceptedTypeGroups);
44+
acceptedTypeGroups = _verifyTypeGroups(acceptedTypeGroups);
4545
return FileSelectorPlatform.instance.getSavePath(
4646
acceptedTypeGroups: acceptedTypeGroups,
4747
initialDirectory: initialDirectory,
@@ -58,15 +58,21 @@ Future<String> getDirectoryPath({
5858
initialDirectory: initialDirectory, confirmButtonText: confirmButtonText);
5959
}
6060

61-
void _verifyExtensions(List<XTypeGroup> acceptedTypeGroups) {
62-
acceptedTypeGroups?.asMap()?.forEach((i, acceptedTypeGroup) {
63-
acceptedTypeGroup.extensions?.asMap()?.forEach((j, ext) {
64-
if (kDebugMode && ext.startsWith('.')) {
65-
print(
66-
'acceptedTypeGroups[${i}].extensions[${j}] with value "${ext}" is invalid.'
67-
' Remove the leading dot.',
68-
);
61+
List<XTypeGroup> _verifyTypeGroups(List<XTypeGroup> groups) {
62+
if (groups == null) return groups;
63+
for (var i = 0; i < groups.length; i++) {
64+
if (groups[i] == null || groups[i].extensions == null) continue;
65+
for (var j = 0; j < groups[i].extensions.length; j++) {
66+
if (groups[i].extensions[j] == null) continue;
67+
if (groups[i].extensions[j].startsWith('.')) {
68+
if (kDebugMode) {
69+
print('acceptedTypeGroups[${i}].extensions[${j}]'
70+
' with value "${groups[i].extensions[j]} is invalid.'
71+
' Please remove the leading dot.');
72+
}
73+
groups[i].extensions[j] = groups[i].extensions[j].substring(1);
6974
}
70-
});
71-
});
75+
}
76+
}
77+
return groups;
7278
}

packages/file_selector/file_selector/test/file_selector_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,24 @@ void main() {
7979
final file = await openFile(acceptedTypeGroups: acceptedTypeGroups);
8080
expect(file, expectedFile);
8181
});
82+
83+
test('works with an extension with leading dot', () async {
84+
final correctTypeGroups = [
85+
XTypeGroup(label: 'images', extensions: [
86+
'jpg',
87+
'png',
88+
]),
89+
];
90+
final incorrectTypeGroups = [
91+
XTypeGroup(label: 'images', extensions: [
92+
'.jpg',
93+
'.png',
94+
]),
95+
];
96+
97+
openFile(acceptedTypeGroups: incorrectTypeGroups);
98+
verify(mock.openFile(acceptedTypeGroups: incorrectTypeGroups));
99+
});
82100
});
83101

84102
group('openFiles', () {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,11 @@ class XTypeGroup {
4141
'webWildCards': webWildCards,
4242
};
4343
}
44+
45+
bool operator ==(o) =>
46+
label == o.label &&
47+
listEquals(extensions, o.extensions) &&
48+
listEquals(mimeTypes, o.mimeTypes) &&
49+
listEquals(macUTIs, o.macUTIs) &&
50+
listEquals(webWildCards, o.webWildCards);
4451
}

0 commit comments

Comments
 (0)