Я пытаюсь сохранить изображение из ресурсов во внутреннюю память. Но мне не удалось загрузить изображение из ресурсов в файл. Вот что я сделал:
onTap: () async {
final String documentPath = (await getApplicationDocumentsDirectory()).path;
String imgPath = (galleryItems[currentIndex].assetName).substring(7);
File image = await getImageFileFromAssets(imgPath);
print(image.path);
}
Я использовал substring(7)
для удаления assets/
as, мое имя assetName выглядит как assets/images/foo.jpg
.
Future<File> getImageFileFromAssets(String path) async {
final byteData = await rootBundle.load('assets/$path');
final file =
await File('${(await getApplicationDocumentsDirectory()).path}/$path')
.create(recursive: true);
await file.writeAsBytes(byteData.buffer
.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));
return file;
}
После того, как я получу image
, Я не знаю, как продолжить создание каталога с моим именем во внутренней памяти. И скопируйте туда файл.
* Примечание: - Я отредактировал сообщение, так как были отмечены некоторые основные c ошибки.
Обновление
Вот что я придумал. И он сохраняет изображение по пути /storage/emulated/0/Android/data/com.example.my_project/files/Pics/foo.jpg
.
File image = await getImageFileFromAssets(imgPath);
final extDir = await getExternalStorageDirectory();
// Path of file
final myImagePath = '${extDir.path}/Pics';
// Create directory inside where file will be saved
await new Directory(myImagePath).create();
// File copied to ext directory.
File newImage =
await image.copy("$myImagePath/${basename(imgPath)}");
print(newImage.path);
Вот несколько ссылок, которые мне действительно помогли:
Особая благодарность @David за помощь. Просмотрите комментарии, чтобы понять всю сцену, если вы здесь, чтобы решить подобную проблему.
Итак, я принимаю ответ от @ David.