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

Commit 330f737

Browse files
eugerossettoadpinola
authored andcommitted
Add integration of FileSelectorApi and add mock for testing purposes.
Remove the old implementation with C++. use dart implementation rename method
1 parent 2d67630 commit 330f737

26 files changed

+62
-2365
lines changed

packages/file_selector/file_selector_windows/lib/file_selector_windows.dart

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,26 @@
33
// found in the LICENSE file.
44

55
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
6+
import 'package:flutter/cupertino.dart';
67

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';
813

914
/// An implementation of [FileSelectorPlatform] for Windows.
1015
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;
1226

1327
/// Registers the Windows implementation.
1428
static void registerWith() {
@@ -21,11 +35,9 @@ class FileSelectorWindows extends FileSelectorPlatform {
2135
String? initialDirectory,
2236
String? confirmButtonText,
2337
}) async {
24-
final List<String?> paths = await _hostApi.showOpenDialog(
38+
final List<String?> paths = _hostApi.showOpenDialog(
2539
SelectionOptions(
26-
allowMultiple: false,
27-
selectFolders: false,
28-
allowedTypes: _typeGroupsFromXTypeGroups(acceptedTypeGroups),
40+
allowedTypes: _allowedXTypeGroups(acceptedTypeGroups),
2941
),
3042
initialDirectory,
3143
confirmButtonText);
@@ -38,11 +50,10 @@ class FileSelectorWindows extends FileSelectorPlatform {
3850
String? initialDirectory,
3951
String? confirmButtonText,
4052
}) async {
41-
final List<String?> paths = await _hostApi.showOpenDialog(
53+
final List<String?> paths = _hostApi.showOpenDialog(
4254
SelectionOptions(
4355
allowMultiple: true,
44-
selectFolders: false,
45-
allowedTypes: _typeGroupsFromXTypeGroups(acceptedTypeGroups),
56+
allowedTypes: _allowedXTypeGroups(acceptedTypeGroups),
4657
),
4758
initialDirectory,
4859
confirmButtonText);
@@ -56,11 +67,9 @@ class FileSelectorWindows extends FileSelectorPlatform {
5667
String? suggestedName,
5768
String? confirmButtonText,
5869
}) async {
59-
final List<String?> paths = await _hostApi.showSaveDialog(
70+
final List<String?> paths = _hostApi.showSaveDialog(
6071
SelectionOptions(
61-
allowMultiple: false,
62-
selectFolders: false,
63-
allowedTypes: _typeGroupsFromXTypeGroups(acceptedTypeGroups),
72+
allowedTypes: _allowedXTypeGroups(acceptedTypeGroups),
6473
),
6574
initialDirectory,
6675
suggestedName,
@@ -73,27 +82,25 @@ class FileSelectorWindows extends FileSelectorPlatform {
7382
String? initialDirectory,
7483
String? confirmButtonText,
7584
}) async {
76-
final List<String?> paths = await _hostApi.showOpenDialog(
85+
final List<String?> paths = _hostApi.showOpenDialog(
7786
SelectionOptions(
78-
allowMultiple: false,
7987
selectFolders: true,
80-
allowedTypes: <TypeGroup>[],
88+
allowedTypes: <XTypeGroup>[],
8189
),
8290
initialDirectory,
8391
confirmButtonText);
8492
return paths.isEmpty ? null : paths.first!;
8593
}
8694
}
8795

88-
List<TypeGroup> _typeGroupsFromXTypeGroups(List<XTypeGroup>? xtypes) {
96+
List<XTypeGroup> _allowedXTypeGroups(List<XTypeGroup>? xtypes) {
8997
return (xtypes ?? <XTypeGroup>[]).map((XTypeGroup xtype) {
9098
if (!xtype.allowsAny && (xtype.extensions?.isEmpty ?? true)) {
9199
throw ArgumentError('Provided type group $xtype does not allow '
92100
'all files, but does not set any of the Windows-supported filter '
93101
'categories. "extensions" must be non-empty for Windows if '
94102
'anything is non-empty.');
95103
}
96-
return TypeGroup(
97-
label: xtype.label ?? '', extensions: xtype.extensions ?? <String>[]);
104+
return xtype;
98105
}).toList();
99106
}

packages/file_selector/file_selector_windows/lib/src/messages.g.dart

Lines changed: 0 additions & 176 deletions
This file was deleted.

packages/file_selector/file_selector_windows/pigeons/copyright.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

packages/file_selector/file_selector_windows/pigeons/messages.dart

Lines changed: 0 additions & 53 deletions
This file was deleted.

packages/file_selector/file_selector_windows/pubspec.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ flutter:
1414
platforms:
1515
windows:
1616
dartPluginClass: FileSelectorWindows
17-
pluginClass: FileSelectorWindows
1817

1918
dependencies:
2019
cross_file: ^0.3.1

0 commit comments

Comments
 (0)