Skip to content

Commit 9b75f40

Browse files
author
Miguel Ruivo
authored
Merge pull request #904 from miguelpruivo/bug/file-extensions-not-enforced-on-windows
#871: file extensions not enforced on Windows
2 parents 2018007 + 13dceba commit 9b75f40

9 files changed

+44
-31
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ Also, sometimes a simple `flutter clean` and `flutter build` again with latest f
1414
A clear and concise description of what the bug is. If the issue happens to be on Android, please make sure that it also happens with a different device/simulator and/or version.
1515

1616
**Platform**
17-
- [] Android
18-
- [] iOS
19-
- [] Web
20-
- [] Desktop (Go)
17+
18+
- [ ] Android
19+
- [ ] iOS
20+
- [ ] Web
21+
- [ ] Desktop
2122

2223
**Platform OS version**
2324
What version did it happen?

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 4.2.7
2+
3+
##### Desktop (macOS & Windows)
4+
Fixes the issue under Windows that the user could select all file types even though a file type filter was enabled. This error existed because the user could select the entry `All Files (*.*)` in the file type filter dropdown. Also, fixes the bug under macOS that users could select files without file extension even when one of the pre-defined file type filters (audio, image, video, or media) was enabled. ([#871](https://github.com/miguelpruivo/flutter_file_picker/issues/871)).
5+
16
## 4.2.6
27

38
##### Android

lib/src/file_picker_linux.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,15 @@ class FilePickerLinux extends FilePicker {
101101
case FileType.any:
102102
return '';
103103
case FileType.audio:
104-
return '*.mp3 *.wav *.midi *.ogg *.aac';
104+
return '*.aac *.midi *.mp3 *.ogg *.wav';
105105
case FileType.custom:
106106
return '*.' + allowedExtensions!.join(' *.');
107107
case FileType.image:
108-
return '*.bmp *.gif *.jpg *.jpeg *.png';
108+
return '*.bmp *.gif *.jpeg *.jpg *.png';
109109
case FileType.media:
110-
return '*.webm *.mpeg *.mkv *.mp4 *.avi *.mov *.flv *.jpg *.jpeg *.bmp *.gif *.png';
110+
return '*.avi *.flv *.mkv *.mov *.mp4 *.mpeg *.webm *.wmv *.bmp *.gif *.jpeg *.jpg *.png';
111111
case FileType.video:
112-
return '*.webm *.mpeg *.mkv *.mp4 *.avi *.mov *.flv';
112+
return '*.avi *.flv *.mkv *.mov *.mp4 *.mpeg *.webm *.wmv';
113113
default:
114114
throw Exception('unknown file type');
115115
}

lib/src/file_picker_macos.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,15 @@ class FilePickerMacOS extends FilePicker {
101101
case FileType.any:
102102
return '';
103103
case FileType.audio:
104-
return '"", "mp3", "wav", "midi", "ogg", "aac"';
104+
return '"aac", "midi", "mp3", "ogg", "wav"';
105105
case FileType.custom:
106106
return '"", "' + allowedExtensions!.join('", "') + '"';
107107
case FileType.image:
108-
return '"", "jpg", "jpeg", "bmp", "gif", "png"';
108+
return '"bmp", "gif", "jpeg", "jpg", "png"';
109109
case FileType.media:
110-
return '"", "webm", "mpeg", "mkv", "mp4", "avi", "mov", "flv", "jpg", "jpeg", "bmp", "gif", "png"';
110+
return '"avi", "flv", "mkv", "mov", "mp4", "mpeg", "webm", "wmv", "bmp", "gif", "jpeg", "jpg", "png"';
111111
case FileType.video:
112-
return '"", "webm", "mpeg", "mkv", "mp4", "avi", "mov", "flv"';
112+
return '"avi", "flv", "mkv", "mov", "mp4", "mpeg", "webm", "wmv"';
113113
default:
114114
throw Exception('unknown file type');
115115
}

lib/src/windows/file_picker_windows.dart

+5-5
Original file line numberDiff line numberDiff line change
@@ -103,17 +103,17 @@ class FilePickerWindows extends FilePicker {
103103
String fileTypeToFileFilter(FileType type, List<String>? allowedExtensions) {
104104
switch (type) {
105105
case FileType.any:
106-
return '*.*\x00\x00';
106+
return 'All Files (*.*)\x00*.*\x00\x00';
107107
case FileType.audio:
108-
return 'Audios (*.mp3)\x00*.mp3\x00All Files (*.*)\x00*.*\x00\x00';
108+
return 'Audios (*.aac,*.midi,*.mp3,*.ogg,*.wav)\x00*.aac;*.midi;*.mp3;*.ogg;*.wav\x00\x00';
109109
case FileType.custom:
110110
return 'Files (*.${allowedExtensions!.join(',*.')})\x00*.${allowedExtensions.join(';*.')}\x00\x00';
111111
case FileType.image:
112-
return 'Images (*.jpeg,*.png,*.gif)\x00*.jpg;*.jpeg;*.png;*.gif\x00All Files (*.*)\x00*.*\x00\x00';
112+
return 'Images (*.bmp,*.gif,*.jpeg,*.jpg,*.png)\x00*.bmp;*.gif;*.jpeg;*.jpg;*.png\x00\x00';
113113
case FileType.media:
114-
return 'Videos (*.webm,*.wmv,*.mpeg,*.mkv,*.mp4,*.avi,*.mov,*.flv)\x00*.webm;*.wmv;*.mpeg;*.mkv;*mp4;*.avi;*.mov;*.flv\x00Images (*.jpeg,*.png,*.gif)\x00*.jpg;*.jpeg;*.png;*.gif\x00All Files (*.*)\x00*.*\x00\x00';
114+
return 'Videos (*.avi,*.flv,*.mkv,*.mov,*.mp4,*.mpeg,*.webm,*.wmv)\x00*.avi;*.flv;*.mkv;*.mov;*.mp4;*.mpeg;*.webm;*.wmv\x00Images (*.bmp,*.gif,*.jpeg,*.jpg,*.png)\x00*.bmp;*.gif;*.jpeg;*.jpg;*.png\x00\x00';
115115
case FileType.video:
116-
return 'Videos (*.webm,*.wmv,*.mpeg,*.mkv,*.mp4,*.avi,*.mov,*.flv)\x00*.webm;*.wmv;*.mpeg;*.mkv;*mp4;*.avi;*.mov;*.flv\x00All Files (*.*)\x00*.*\x00\x00';
116+
return 'Videos (*.avi,*.flv,*.mkv,*.mov,*.mp4,*.mpeg,*.webm,*.wmv)\x00*.avi;*.flv;*.mkv;*.mov;*.mp4;*.mpeg;*.webm;*.wmv\x00\x00';
117117
default:
118118
throw Exception('unknown file type');
119119
}

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: A package that allows you to use a native file explorer to pick sin
33
homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker
44
repository: https://github.com/miguelpruivo/flutter_file_picker
55
issue_tracker: https://github.com/miguelpruivo/flutter_file_picker/issues
6-
version: 4.2.6
6+
version: 4.2.7
77

88
dependencies:
99
flutter:

test/file_picker_linux_test.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,24 @@ void main() {
2020

2121
expect(
2222
picker.fileTypeToFileFilter(FileType.audio, null),
23-
equals('*.mp3 *.wav *.midi *.ogg *.aac'),
23+
equals('*.aac *.midi *.mp3 *.ogg *.wav'),
2424
);
2525

2626
expect(
2727
picker.fileTypeToFileFilter(FileType.image, null),
28-
equals('*.bmp *.gif *.jpg *.jpeg *.png'),
28+
equals('*.bmp *.gif *.jpeg *.jpg *.png'),
2929
);
3030

3131
expect(
3232
picker.fileTypeToFileFilter(FileType.media, null),
3333
equals(
34-
'*.webm *.mpeg *.mkv *.mp4 *.avi *.mov *.flv *.jpg *.jpeg *.bmp *.gif *.png',
34+
'*.avi *.flv *.mkv *.mov *.mp4 *.mpeg *.webm *.wmv *.bmp *.gif *.jpeg *.jpg *.png',
3535
),
3636
);
3737

3838
expect(
3939
picker.fileTypeToFileFilter(FileType.video, null),
40-
equals('*.webm *.mpeg *.mkv *.mp4 *.avi *.mov *.flv'),
40+
equals('*.avi *.flv *.mkv *.mov *.mp4 *.mpeg *.webm *.wmv'),
4141
);
4242
});
4343

test/file_picker_macos_test.dart

+10-4
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,24 @@ void main() {
1616

1717
expect(
1818
picker.fileTypeToFileFilter(FileType.audio, null),
19-
equals('"", "mp3", "wav", "midi", "ogg", "aac"'),
19+
equals('"aac", "midi", "mp3", "ogg", "wav"'),
2020
);
2121

2222
expect(
2323
picker.fileTypeToFileFilter(FileType.image, null),
24-
equals('"", "jpg", "jpeg", "bmp", "gif", "png"'),
24+
equals('"bmp", "gif", "jpeg", "jpg", "png"'),
2525
);
2626

2727
expect(
2828
picker.fileTypeToFileFilter(FileType.media, null),
2929
equals(
30-
'"", "webm", "mpeg", "mkv", "mp4", "avi", "mov", "flv", "jpg", "jpeg", "bmp", "gif", "png"',
30+
'"avi", "flv", "mkv", "mov", "mp4", "mpeg", "webm", "wmv", "bmp", "gif", "jpeg", "jpg", "png"',
3131
),
3232
);
3333

3434
expect(
3535
picker.fileTypeToFileFilter(FileType.video, null),
36-
equals('"", "webm", "mpeg", "mkv", "mp4", "avi", "mov", "flv"'),
36+
equals('"avi", "flv", "mkv", "mov", "mp4", "mpeg", "webm", "wmv"'),
3737
);
3838
});
3939

@@ -42,6 +42,12 @@ void main() {
4242
() {
4343
final picker = FilePickerMacOS();
4444

45+
// TODO: the first empty file type ("", ) is required in some cases, e.g.
46+
// when filtering for *.dart and other special file types. Unfortunately,
47+
// the empty file type enables the selection of files without extension.
48+
// In other cases, e.g. when filtering for *.png files, it isn't required
49+
// to provide the empty file type. We need to find a solution to make the
50+
// filter work without having to provide an empty file type first.
4551
expect(
4652
picker.fileTypeToFileFilter(FileType.custom, ['dart']),
4753
equals('"", "dart"'),

test/file_picker_windows_test.dart

+6-5
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,33 @@ void main() {
1111

1212
expect(
1313
picker.fileTypeToFileFilter(FileType.any, null),
14-
equals('*.*\x00\x00'),
14+
equals('All Files (*.*)\x00*.*\x00\x00'),
1515
);
1616

1717
expect(
1818
picker.fileTypeToFileFilter(FileType.audio, null),
19-
equals('Audios (*.mp3)\x00*.mp3\x00All Files (*.*)\x00*.*\x00\x00'),
19+
equals(
20+
'Audios (*.aac,*.midi,*.mp3,*.ogg,*.wav)\x00*.aac;*.midi;*.mp3;*.ogg;*.wav\x00\x00'),
2021
);
2122

2223
expect(
2324
picker.fileTypeToFileFilter(FileType.image, null),
2425
equals(
25-
'Images (*.jpeg,*.png,*.gif)\x00*.jpg;*.jpeg;*.png;*.gif\x00All Files (*.*)\x00*.*\x00\x00',
26+
'Images (*.bmp,*.gif,*.jpeg,*.jpg,*.png)\x00*.bmp;*.gif;*.jpeg;*.jpg;*.png\x00\x00',
2627
),
2728
);
2829

2930
expect(
3031
picker.fileTypeToFileFilter(FileType.media, null),
3132
equals(
32-
'Videos (*.webm,*.wmv,*.mpeg,*.mkv,*.mp4,*.avi,*.mov,*.flv)\x00*.webm;*.wmv;*.mpeg;*.mkv;*mp4;*.avi;*.mov;*.flv\x00Images (*.jpeg,*.png,*.gif)\x00*.jpg;*.jpeg;*.png;*.gif\x00All Files (*.*)\x00*.*\x00\x00',
33+
'Videos (*.avi,*.flv,*.mkv,*.mov,*.mp4,*.mpeg,*.webm,*.wmv)\x00*.avi;*.flv;*.mkv;*.mov;*.mp4;*.mpeg;*.webm;*.wmv\x00Images (*.bmp,*.gif,*.jpeg,*.jpg,*.png)\x00*.bmp;*.gif;*.jpeg;*.jpg;*.png\x00\x00',
3334
),
3435
);
3536

3637
expect(
3738
picker.fileTypeToFileFilter(FileType.video, null),
3839
equals(
39-
'Videos (*.webm,*.wmv,*.mpeg,*.mkv,*.mp4,*.avi,*.mov,*.flv)\x00*.webm;*.wmv;*.mpeg;*.mkv;*mp4;*.avi;*.mov;*.flv\x00All Files (*.*)\x00*.*\x00\x00',
40+
'Videos (*.avi,*.flv,*.mkv,*.mov,*.mp4,*.mpeg,*.webm,*.wmv)\x00*.avi;*.flv;*.mkv;*.mov;*.mp4;*.mpeg;*.webm;*.wmv\x00\x00',
4041
),
4142
);
4243
});

0 commit comments

Comments
 (0)