Skip to content

Commit

Permalink
feat: add file_selector package
Browse files Browse the repository at this point in the history
  • Loading branch information
Tienisto committed Aug 29, 2023
1 parent c703fad commit 8d30b90
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 12 deletions.
4 changes: 3 additions & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@
android:name="${applicationName}"
android:usesCleartextTraffic="true"
android:banner="@drawable/banner"
android:icon="@mipmap/ic_launcher">
android:icon="@mipmap/ic_launcher"
android:requestLegacyExternalStorage="true"
>

<!-- localsend: prevent multiple instances by android:launchMode="singleTask" -->
<activity
Expand Down
4 changes: 2 additions & 2 deletions lib/pages/receive_options_page.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:localsend_app/gen/strings.g.dart';
import 'package:localsend_app/provider/network/server/server_provider.dart';
import 'package:localsend_app/provider/selection/selected_receiving_files_provider.dart';
import 'package:localsend_app/util/file_size_helper.dart';
import 'package:localsend_app/util/native/pick_directory_path.dart';
import 'package:localsend_app/util/native/platform_check.dart';
import 'package:localsend_app/widget/custom_dropdown_button.dart';
import 'package:localsend_app/widget/custom_icon_button.dart';
Expand Down Expand Up @@ -41,7 +41,7 @@ class ReceiveOptionsPage extends StatelessWidget {
padding: const EdgeInsets.only(left: 10),
child: CustomIconButton(
onPressed: () async {
final directory = await FilePicker.platform.getDirectoryPath();
final directory = await pickDirectoryPath();
if (directory != null) {
ref.notifier(serverProvider).setSessionDestinationDir(directory);
}
Expand Down
4 changes: 2 additions & 2 deletions lib/pages/tabs/settings_tab.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:localsend_app/constants.dart';
import 'package:localsend_app/gen/strings.g.dart';
Expand All @@ -13,6 +12,7 @@ import 'package:localsend_app/provider/settings_provider.dart';
import 'package:localsend_app/provider/version_provider.dart';
import 'package:localsend_app/theme.dart';
import 'package:localsend_app/util/native/autostart_helper.dart';
import 'package:localsend_app/util/native/pick_directory_path.dart';
import 'package:localsend_app/util/native/platform_check.dart';
import 'package:localsend_app/util/sleep.dart';
import 'package:localsend_app/util/ui/snackbar.dart';
Expand Down Expand Up @@ -254,7 +254,7 @@ class _SettingsTabState extends State<SettingsTab> with Riverpie {
return;
}

final directory = await FilePicker.platform.getDirectoryPath();
final directory = await pickDirectoryPath();
if (directory != null) {
await ref.notifier(settingsProvider).setDestination(directory);
}
Expand Down
27 changes: 20 additions & 7 deletions lib/util/native/file_picker.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import 'dart:async';

import 'package:file_picker/file_picker.dart';
import 'package:file_selector/file_selector.dart' as file_selector;
import 'package:flutter/material.dart';
import 'package:localsend_app/gen/strings.g.dart';
import 'package:localsend_app/pages/apk_picker_page.dart';
import 'package:localsend_app/provider/selection/selected_sending_files_provider.dart';
import 'package:localsend_app/theme.dart';
import 'package:localsend_app/util/native/pick_directory_path.dart';
import 'package:localsend_app/util/native/platform_check.dart';
import 'package:localsend_app/util/sleep.dart';
import 'package:localsend_app/util/ui/asset_picker_translated_text_delegate.dart';
Expand Down Expand Up @@ -92,12 +94,23 @@ enum FilePickerOption {
);
}
try {
final result = await FilePicker.platform.pickFiles(allowMultiple: true);
if (result != null) {
await ref.notifier(selectedSendingFilesProvider).addFiles(
files: result.files,
converter: CrossFileConverters.convertPlatformFile,
);
if (checkPlatform([TargetPlatform.android])) {
// We also need to use the file_picker package because file_selector does not expose the raw path.
final result = await FilePicker.platform.pickFiles(allowMultiple: true);
if (result != null) {
await ref.notifier(selectedSendingFilesProvider).addFiles(
files: result.files,
converter: CrossFileConverters.convertPlatformFile,
);
}
} else {
final result = await file_selector.openFiles();
if (result.isNotEmpty) {
await ref.notifier(selectedSendingFilesProvider).addFiles<file_selector.XFile>(
files: result,
converter: CrossFileConverters.convertXFile,
);
}
}
} catch (e) {
// ignore: use_build_context_synchronously
Expand Down Expand Up @@ -130,7 +143,7 @@ enum FilePickerOption {
);
await sleepAsync(200); // Wait for the dialog to be shown
try {
final directoryPath = await FilePicker.platform.getDirectoryPath();
final directoryPath = await pickDirectoryPath();
if (directoryPath != null) {
await ref.notifier(selectedSendingFilesProvider).addDirectory(directoryPath);
}
Expand Down
18 changes: 18 additions & 0 deletions lib/util/native/pick_directory_path.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:file_picker/file_picker.dart';
import 'package:file_selector/file_selector.dart' as file_selector;
import 'package:flutter/material.dart';
import 'package:localsend_app/util/native/platform_check.dart';

/// Opens a file picker to select a directory.
/// Returns null if the user cancels the selection.
Future<String?> pickDirectoryPath() async {
if (checkPlatform([TargetPlatform.android])) {
/// We need to use the file_picker package because file_selector does not expose the raw path.
/// We need the raw path to properly manipulate the path to save new files, or
/// to list files recursively.
/// https://github.com/miguelpruivo/flutter_file_picker/issues/1282
return await FilePicker.platform.getDirectoryPath();
} else {
return await file_selector.getDirectoryPath();
}
}
32 changes: 32 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.3.4"
file_selector:
dependency: "direct main"
description:
name: file_selector
sha256: "59b35aa4af7988be7ec88f9ddaa6c71c5b54bf0f8b35009389d9343b10e9c3af"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
file_selector_android:
dependency: transitive
description:
name: file_selector_android
sha256: "43e5c719f671b9181bef1bf2851135c3ad993a9a6c804a4ccb07579cfee84e34"
url: "https://pub.dev"
source: hosted
version: "0.5.0+2"
file_selector_ios:
dependency: transitive
description:
name: file_selector_ios
sha256: "507af301b21b1dbb6fd0615ba21190b2b4574edb672929f32ce7f610c40a9bd9"
url: "https://pub.dev"
source: hosted
version: "0.5.1+5"
file_selector_linux:
dependency: transitive
description:
Expand All @@ -393,6 +417,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.6.0"
file_selector_web:
dependency: transitive
description:
name: file_selector_web
sha256: e292740c469df0aeeaba0895bf622bea351a05e87d22864c826bf21c4780e1d7
url: "https://pub.dev"
source: hosted
version: "0.9.2"
file_selector_windows:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ dependencies:
dio: 5.3.2
dynamic_color: 1.6.6
file_picker: 5.3.4
file_selector: 1.0.0
flutter:
sdk: flutter
flutter_localizations:
Expand Down

0 comments on commit 8d30b90

Please sign in to comment.