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

Commit 75cd297

Browse files
eugerossettoadpinola
authored andcommitted
Add file_selector getDirectoriesPaths
1 parent 3982f4c commit 75cd297

File tree

4 files changed

+104
-7
lines changed

4 files changed

+104
-7
lines changed

packages/file_selector/file_selector/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.9.2+2
2+
3+
* Adds `getDirectoriesPaths` method.
4+
15
## 0.9.2+1
26

37
* Changes XTypeGroup initialization from final to const.

packages/file_selector/file_selector/lib/file_selector.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,22 @@ Future<String?> getDirectoryPath({
123123
return FileSelectorPlatform.instance.getDirectoryPath(
124124
initialDirectory: initialDirectory, confirmButtonText: confirmButtonText);
125125
}
126+
127+
/// Opens a directory selection dialog and returns a list of the paths chosen by the user.
128+
/// This always returns `null` on the web.
129+
///
130+
/// [initialDirectory] is the full path to the directory that will be displayed
131+
/// when the dialog is opened. When not provided, the platform will pick an
132+
/// initial location.
133+
///
134+
/// [confirmButtonText] is the text in the confirmation button of the dialog.
135+
/// When not provided, the default OS label is used (for example, "Open").
136+
///
137+
/// Returns `null` if the user cancels the operation.
138+
Future<List<String?>?> getDirectoriesPaths({
139+
String? initialDirectory,
140+
String? confirmButtonText,
141+
}) async {
142+
return FileSelectorPlatform.instance.getDirectoriesPaths(
143+
initialDirectory: initialDirectory, confirmButtonText: confirmButtonText);
144+
}

packages/file_selector/file_selector/pubspec.yaml

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ description: Flutter plugin for opening and saving files, or selecting
33
directories, using native file selection UI.
44
repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/file_selector
55
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22
6-
version: 0.9.2+1
6+
version: 0.9.2+2
7+
# TODO(eugerossetto): remove this once file_selector_platform_interface version is updated to 2.3.0
8+
publish_to: 'none'
79

810
environment:
911
sdk: ">=2.12.0 <3.0.0"
@@ -23,13 +25,20 @@ flutter:
2325
windows:
2426
default_package: file_selector_windows
2527

28+
# TODO(eugerossetto): This should be reverted once file_selector_platform_interface 2.3.0 is published.
2629
dependencies:
27-
file_selector_ios: ^0.5.0
28-
file_selector_linux: ^0.9.0
29-
file_selector_macos: ^0.9.0
30-
file_selector_platform_interface: ^2.2.0
31-
file_selector_web: ^0.9.0
32-
file_selector_windows: ^0.9.0
30+
file_selector_ios:
31+
path: ../file_selector_ios
32+
file_selector_linux:
33+
path: ../file_selector_linux
34+
file_selector_macos:
35+
path: ../file_selector_macos
36+
file_selector_platform_interface:
37+
path: ../file_selector_platform_interface
38+
file_selector_web:
39+
path: ../file_selector_web
40+
file_selector_windows:
41+
path: ../file_selector_windows
3342
flutter:
3443
sdk: flutter
3544

packages/file_selector/file_selector/test/file_selector_test.dart

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,55 @@ void main() {
258258
expect(directoryPath, expectedDirectoryPath);
259259
});
260260
});
261+
262+
group('getDirectoriesPaths', () {
263+
const List<String> expectedDirectoryPaths = <String>[
264+
'/example/path',
265+
'/example/2/path'
266+
];
267+
268+
test('works', () async {
269+
fakePlatformImplementation
270+
..setExpectations(
271+
initialDirectory: initialDirectory,
272+
confirmButtonText: confirmButtonText)
273+
..setPathsResponse(expectedDirectoryPaths);
274+
275+
final List<String?>? directoryPaths = await getDirectoriesPaths(
276+
initialDirectory: initialDirectory,
277+
confirmButtonText: confirmButtonText,
278+
);
279+
280+
expect(directoryPaths, expectedDirectoryPaths);
281+
});
282+
283+
test('works with no arguments', () async {
284+
fakePlatformImplementation.setPathsResponse(expectedDirectoryPaths);
285+
286+
final List<String?>? directoryPaths = await getDirectoriesPaths();
287+
expect(directoryPaths, expectedDirectoryPaths);
288+
});
289+
290+
test('sets the initial directory', () async {
291+
fakePlatformImplementation
292+
..setExpectations(initialDirectory: initialDirectory)
293+
..setPathsResponse(expectedDirectoryPaths);
294+
295+
final List<String?>? directoryPaths =
296+
await getDirectoriesPaths(initialDirectory: initialDirectory);
297+
expect(directoryPaths, expectedDirectoryPaths);
298+
});
299+
300+
test('sets the button confirmation label', () async {
301+
fakePlatformImplementation
302+
..setExpectations(confirmButtonText: confirmButtonText)
303+
..setPathsResponse(expectedDirectoryPaths);
304+
305+
final List<String?>? directoryPaths =
306+
await getDirectoriesPaths(confirmButtonText: confirmButtonText);
307+
expect(directoryPaths, expectedDirectoryPaths);
308+
});
309+
});
261310
}
262311

263312
class FakeFileSelector extends Fake
@@ -271,6 +320,7 @@ class FakeFileSelector extends Fake
271320
// Return values.
272321
List<XFile>? files;
273322
String? path;
323+
List<String>? paths;
274324

275325
void setExpectations({
276326
List<XTypeGroup> acceptedTypeGroups = const <XTypeGroup>[],
@@ -294,6 +344,11 @@ class FakeFileSelector extends Fake
294344
this.path = path;
295345
}
296346

347+
// ignore: use_setters_to_change_properties
348+
void setPathsResponse(List<String> paths) {
349+
this.paths = paths;
350+
}
351+
297352
@override
298353
Future<XFile?> openFile({
299354
List<XTypeGroup>? acceptedTypeGroups,
@@ -341,4 +396,14 @@ class FakeFileSelector extends Fake
341396
expect(confirmButtonText, this.confirmButtonText);
342397
return path;
343398
}
399+
400+
@override
401+
Future<List<String>?> getDirectoriesPaths({
402+
String? initialDirectory,
403+
String? confirmButtonText,
404+
}) async {
405+
expect(initialDirectory, this.initialDirectory);
406+
expect(confirmButtonText, this.confirmButtonText);
407+
return paths;
408+
}
344409
}

0 commit comments

Comments
 (0)