From d056dbf9eeef7033dbc012d0c05800063e820042 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 29 Oct 2023 19:02:39 +0600 Subject: [PATCH] fix: android invalid download location Download not starting or not explaining error #720 --- lib/pages/settings/settings.dart | 21 +++++++++++++-------- pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index e319997a..5632a89a 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -1,5 +1,6 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:collection/collection.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:file_selector/file_selector.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -47,15 +48,19 @@ class SettingsPage extends HookConsumerWidget { }, []); final pickDownloadLocation = useCallback(() async { - String? dirStr = await getDirectoryPath( - initialDirectory: preferences.downloadLocation, - ); - if (dirStr == null) return; - if (DesktopTools.platform.isAndroid && dirStr.startsWith("content://")) { - dirStr = - "/storage/emulated/0/${Uri.decodeFull(dirStr).split("primary:").last}"; + if (DesktopTools.platform.isMobile) { + final dirStr = await FilePicker.platform.getDirectoryPath( + initialDirectory: preferences.downloadLocation, + ); + if (dirStr == null) return; + preferences.setDownloadLocation(dirStr); + } else { + String? dirStr = await getDirectoryPath( + initialDirectory: preferences.downloadLocation, + ); + if (dirStr == null) return; + preferences.setDownloadLocation(dirStr); } - preferences.setDownloadLocation(dirStr); }, [preferences.downloadLocation]); return SafeArea( diff --git a/pubspec.lock b/pubspec.lock index 3dbc3cbf..bd50225a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -513,6 +513,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_picker: + dependency: "direct main" + description: + name: file_picker + sha256: "903dd4ba13eae7cef64acc480e91bf54c3ddd23b5b90b639c170f3911e489620" + url: "https://pub.dev" + source: hosted + version: "6.0.0" file_selector: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 04f2d8b8..75b14bc1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -114,6 +114,7 @@ dependencies: youtube_explode_dart: ^2.0.1 simple_icons: ^7.10.0 audio_service_mpris: ^0.1.0 + file_picker: ^6.0.0 dev_dependencies: build_runner: ^2.3.2