From 648bbde8a20b4c0f781d734a560b25f6eb02762a Mon Sep 17 00:00:00 2001 From: eugerossetto Date: Thu, 13 Oct 2022 12:33:24 -0300 Subject: [PATCH 1/2] Add getDirectoriesPaths method to the file_selector_platform_interface --- .../file_selector_platform_interface/CHANGELOG.md | 4 ++++ .../src/platform_interface/file_selector_interface.dart | 9 +++++++++ .../file_selector_platform_interface/pubspec.yaml | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md index ad1fe2cb6cef..79cc7a22027b 100644 --- a/packages/file_selector/file_selector_platform_interface/CHANGELOG.md +++ b/packages/file_selector/file_selector_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.0+1 + +* Adds `getDirectoriesPaths` method to interface. + ## 2.2.0 * Makes `XTypeGroup`'s constructor constant. diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart b/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart index eb4563c47917..bed7ec52bd8e 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart @@ -74,4 +74,13 @@ abstract class FileSelectorPlatform extends PlatformInterface { }) { throw UnimplementedError('getDirectoryPath() has not been implemented.'); } + + /// Open file dialog for loading directories and return multiple directories paths + /// Returns `null` if user cancels the operation. + Future> getDirectoriesPaths({ + String? initialDirectory, + String? confirmButtonText, + }) { + throw UnimplementedError('getDirectoriesPaths() has not been implemented.'); + } } diff --git a/packages/file_selector/file_selector_platform_interface/pubspec.yaml b/packages/file_selector/file_selector_platform_interface/pubspec.yaml index c4500061a3a1..53748b0ad9a9 100644 --- a/packages/file_selector/file_selector_platform_interface/pubspec.yaml +++ b/packages/file_selector/file_selector_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/plugins/tree/main/packages/file_selector/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.0 +version: 2.2.0+1 environment: sdk: ">=2.12.0 <3.0.0" From 0e3a349d867363d4672ecc1ccc2ae58beda1791b Mon Sep 17 00:00:00 2001 From: eugerossetto Date: Thu, 13 Oct 2022 15:00:29 -0300 Subject: [PATCH 2/2] Add getDirectoriesPaths to method channel. --- .../method_channel_file_selector.dart | 14 +++++++++ .../file_selector_interface.dart | 2 +- .../method_channel_file_selector_test.dart | 31 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart b/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart index d6aebd01730f..95f12e610871 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/method_channel/method_channel_file_selector.dart @@ -93,4 +93,18 @@ class MethodChannelFileSelector extends FileSelectorPlatform { }, ); } + + /// Gets a list of directories paths from a dialog + @override + Future?> getDirectoriesPaths( + {String? initialDirectory, String? confirmButtonText}) async { + return _channel.invokeListMethod( + 'getDirectoriesPaths', + { + 'initialDirectory': initialDirectory, + 'confirmButtonText': confirmButtonText, + 'multiple': true, + }, + ); + } } diff --git a/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart b/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart index bed7ec52bd8e..55bac70026b6 100644 --- a/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart +++ b/packages/file_selector/file_selector_platform_interface/lib/src/platform_interface/file_selector_interface.dart @@ -77,7 +77,7 @@ abstract class FileSelectorPlatform extends PlatformInterface { /// Open file dialog for loading directories and return multiple directories paths /// Returns `null` if user cancels the operation. - Future> getDirectoriesPaths({ + Future?> getDirectoriesPaths({ String? initialDirectory, String? confirmButtonText, }) { diff --git a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart index 0f5f3a17ae0c..98033b1817b7 100644 --- a/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart +++ b/packages/file_selector/file_selector_platform_interface/test/method_channel_file_selector_test.dart @@ -247,6 +247,37 @@ void main() { ); }); }); + group('#getDirectoriesPaths', () { + test('passes initialDirectory correctly', () async { + await plugin.getDirectoriesPaths( + initialDirectory: '/example/directory'); + + expect( + log, + [ + isMethodCall('getDirectoriesPaths', arguments: { + 'initialDirectory': '/example/directory', + 'confirmButtonText': null, + 'multiple': true + }), + ], + ); + }); + test('passes confirmButtonText correctly', () async { + await plugin.getDirectoriesPaths(confirmButtonText: 'Open File'); + + expect( + log, + [ + isMethodCall('getDirectoriesPaths', arguments: { + 'initialDirectory': null, + 'confirmButtonText': 'Open File', + 'multiple': true + }), + ], + ); + }); + }); }); }); }