#flutter #flutter-dependencies #flutter-packages #flutter-image
#flutter #flutter-зависимости #flutter-пакеты #flutter-изображение
Вопрос:
Я пытаюсь сохранить изображение в локальном каталоге телефона. Здесь я использую пакет image_downloader для этого. Вот мой код
class DownloadImage {
Future writeToDownloadPath(GridImage imageData) async {
try {
var imageId = await ImageDownloader.downloadImage(imageData.url
,destination: AndroidDestinationType.custom(directory: 'motivational Quotes',
inPublicDir: true ,subDirectory: '/motivational Quotes${imageData.location}'));
print('imageId' imageId.toString());
if (imageId == null) {
return;
}
} catch(e) {
print(e.toString());
}
}
}
Когда я запускаю на устройстве Android 10 и пытаюсь загрузить изображение, оно выдает мне эту ошибку,
E/MethodChannel#plugins.ko2ic.com/image_downloader(25282): java.lang.IllegalStateException: Not one of standard directories: motivational Quotes
Я уже добавил android:requestLegacyExternalStorage=»true» в AndroidManifest и установил targetSdkVersion и compileSdkVersion в 29 в файле build.gradle. Я очистил flutter и запустил код, но проблема осталась прежней.
build.gradle
defaultConfig {
applicationId "com.example.app
minSdkVersion 21
targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
AndroidManifest
<application
android:name="io.flutter.app.FlutterApplication"
android:label="Motivational Quotes"
android:icon="@mipmap/ic_launcher"
android:requestLegacyExternalStorage="true">
Я был бы очень признателен, если кто-нибудь сможет помочь мне с этой проблемой. Спасибо!
Ответ №1:
Я столкнулся с той же проблемой с Android 10, я думаю, что функция сохранения в пользовательском каталоге несовместима с Android10. Тот же код отлично работает для других
Ответ №2:
В этом пакете всего 4 стандартных каталога.
/// Environment.DIRECTORY_DOWNLOADS
static final directoryDownloads =
AndroidDestinationType._internal("DIRECTORY_DOWNLOADS");
/// Environment.DIRECTORY_PICTURES
static final directoryPictures =
AndroidDestinationType._internal("DIRECTORY_PICTURES");
/// Environment.DIRECTORY_DCIM
static final directoryDCIM =
AndroidDestinationType._internal("DIRECTORY_DCIM");
/// Environment.DIRECTORY_MOVIES
static final directoryMovies =
AndroidDestinationType._internal("DIRECTORY_MOVIES");
Итак, вам нужно изменить здесь:
var imageId = await ImageDownloader.downloadImage(imageData.url
,destination: AndroidDestinationType.custom(directory: 'motivational Quotes',
inPublicDir: true ,subDirectory: '/motivational Quotes${imageData.location}'));
Я советую вам сделать это просто так:
destination: AndroidDestinationType.directoryPictures
..inExternalFilesDir()
..subDirectory('${imageData.location}'),
Комментарии:
1. Спасибо за ответ. да, он загружает изображение таким образом, но оно хранится в » / storage/emulated/0 / Android/data/<applicationId>/files «. Но я хочу увидеть это загруженное изображение в телефонной галерее. Поэтому для этого я должен сохранить изображение в папке dowload или в любой другой указанной папке. Не могли бы вы дать мне решение для этого. Я был бы очень признателен, если бы вы могли помочь мне с этим @Akif