3
3
// found in the LICENSE file.
4
4
5
5
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart' ;
6
+ import 'package:flutter/cupertino.dart' ;
6
7
7
- import 'src/messages.g.dart' ;
8
+ import 'src/file_selector_api.dart' ;
9
+ import 'src/file_selector_dart/dialog_wrapper_factory.dart' ;
10
+ import 'src/file_selector_dart/file_dialog_controller_factory.dart' ;
11
+ import 'src/file_selector_dart/ifile_dialog_factory.dart' ;
12
+ import 'src/file_selector_dart/selection_options.dart' ;
8
13
9
14
/// An implementation of [FileSelectorPlatform] for Windows.
10
15
class FileSelectorWindows extends FileSelectorPlatform {
11
- final FileSelectorApi _hostApi = FileSelectorApi ();
16
+ /// Creates a new instance of [FileSelectorApi] .
17
+ FileSelectorWindows ()
18
+ : _hostApi = FileSelectorApi (DialogWrapperFactory (
19
+ FileDialogControllerFactory (), IFileDialogFactory ()));
20
+
21
+ /// Creates a fake implementation of [FileSelectorApi] for testing purposes.
22
+ @visibleForTesting
23
+ FileSelectorWindows .useFakeApi (this ._hostApi);
24
+
25
+ final FileSelectorApi _hostApi;
12
26
13
27
/// Registers the Windows implementation.
14
28
static void registerWith () {
@@ -21,11 +35,9 @@ class FileSelectorWindows extends FileSelectorPlatform {
21
35
String ? initialDirectory,
22
36
String ? confirmButtonText,
23
37
}) async {
24
- final List <String ?> paths = await _hostApi.showOpenDialog (
38
+ final List <String ?> paths = _hostApi.showOpenDialog (
25
39
SelectionOptions (
26
- allowMultiple: false ,
27
- selectFolders: false ,
28
- allowedTypes: _typeGroupsFromXTypeGroups (acceptedTypeGroups),
40
+ allowedTypes: _allowedXTypeGroups (acceptedTypeGroups),
29
41
),
30
42
initialDirectory,
31
43
confirmButtonText);
@@ -38,11 +50,10 @@ class FileSelectorWindows extends FileSelectorPlatform {
38
50
String ? initialDirectory,
39
51
String ? confirmButtonText,
40
52
}) async {
41
- final List <String ?> paths = await _hostApi.showOpenDialog (
53
+ final List <String ?> paths = _hostApi.showOpenDialog (
42
54
SelectionOptions (
43
55
allowMultiple: true ,
44
- selectFolders: false ,
45
- allowedTypes: _typeGroupsFromXTypeGroups (acceptedTypeGroups),
56
+ allowedTypes: _allowedXTypeGroups (acceptedTypeGroups),
46
57
),
47
58
initialDirectory,
48
59
confirmButtonText);
@@ -56,11 +67,9 @@ class FileSelectorWindows extends FileSelectorPlatform {
56
67
String ? suggestedName,
57
68
String ? confirmButtonText,
58
69
}) async {
59
- final List <String ?> paths = await _hostApi.showSaveDialog (
70
+ final List <String ?> paths = _hostApi.showSaveDialog (
60
71
SelectionOptions (
61
- allowMultiple: false ,
62
- selectFolders: false ,
63
- allowedTypes: _typeGroupsFromXTypeGroups (acceptedTypeGroups),
72
+ allowedTypes: _allowedXTypeGroups (acceptedTypeGroups),
64
73
),
65
74
initialDirectory,
66
75
suggestedName,
@@ -73,27 +82,25 @@ class FileSelectorWindows extends FileSelectorPlatform {
73
82
String ? initialDirectory,
74
83
String ? confirmButtonText,
75
84
}) async {
76
- final List <String ?> paths = await _hostApi.showOpenDialog (
85
+ final List <String ?> paths = _hostApi.showOpenDialog (
77
86
SelectionOptions (
78
- allowMultiple: false ,
79
87
selectFolders: true ,
80
- allowedTypes: < TypeGroup > [],
88
+ allowedTypes: < XTypeGroup > [],
81
89
),
82
90
initialDirectory,
83
91
confirmButtonText);
84
92
return paths.isEmpty ? null : paths.first! ;
85
93
}
86
94
}
87
95
88
- List <TypeGroup > _typeGroupsFromXTypeGroups (List <XTypeGroup >? xtypes) {
96
+ List <XTypeGroup > _allowedXTypeGroups (List <XTypeGroup >? xtypes) {
89
97
return (xtypes ?? < XTypeGroup > []).map ((XTypeGroup xtype) {
90
98
if (! xtype.allowsAny && (xtype.extensions? .isEmpty ?? true )) {
91
99
throw ArgumentError ('Provided type group $xtype does not allow '
92
100
'all files, but does not set any of the Windows-supported filter '
93
101
'categories. "extensions" must be non-empty for Windows if '
94
102
'anything is non-empty.' );
95
103
}
96
- return TypeGroup (
97
- label: xtype.label ?? '' , extensions: xtype.extensions ?? < String > []);
104
+ return xtype;
98
105
}).toList ();
99
106
}
0 commit comments