Я пытаюсь создать папку после установки приложения. например, как этот вопрос
Создать папку при установке приложения
я следую два решения
https://stackoverflow.com/a/54848857
https://stackoverflow.com/a/55349516
Я пытаюсь загрузить изображение и сохранить его после создания папки. Я использую getApplicationDocumentDirectory
для создания папки, но папка отсутствует на устройстве. Но если я проверю путь каталога из кода, существует. Если я изменю на getExternalStorageDirectory
, папка существует, но внутри Android / data / packages_name / files / my_folder это не то, что я хочу. Если папка существует, загрузка изображения не отображается в галерее.
Примечание: я используюреальное устройство и у меня нет SD-карты. Я хочу сделать папку во внутреннем хранилище.
Вот мой код
@override
void initState() {
super.initState();
_createFolder();
createDir();
}
// SOLUTION ONE
createDir() async {
final url =
'https://images.pexels.com/photos/414612/pexels-photo-414612.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500';
io.Directory baseDir =
await dirPath.getExternalStorageDirectory(); //only for Android
// Directory baseDir = await getApplicationDocumentsDirectory(); //works for both iOS and Android
String dirToBeCreated = "MY FOLDER";
// I add ../../../../../ so that my folder is out of my packages.
String finalDir = p.join(baseDir.path + '../../../../../', dirToBeCreated);
var dir = io.Directory(finalDir);
bool dirExists = await dir.exists();
if (!dirExists) {
dir.create(
recursive: true); //pass recursive as true if directory is recursive
}
if (dirExists) {
io.File file = await cm.DefaultCacheManager().getSingleFile(url);
im.Image image = im.decodeImage(file.readAsBytesSync());
io.File('$finalDir/${DateTime.now().toIso8601String()}.png')
..writeAsBytesSync(im.encodePng(image));
}
print(finalDir);
print(dirExists);
//Now you can use this directory for saving file, etc.
//In case you are using external storage, make sure you have storage permissions.
}
// SOLUTION TWO
void _createFolder() async {
final url =
'https://images.pexels.com/photos/414612/pexels-photo-414612.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500';
String directory =
(await dirPath.getApplicationDocumentsDirectory()).path;
String path = '$directory/FOLDER TWO';
if (await io.Directory(path).exists() != true) {
print("Directory not exist");
io.Directory(path).createSync(
recursive: true,
);
//do your work
} else {
print("Directoryexist");
}
io.File file = await cm.DefaultCacheManager().getSingleFile(url);
im.Image image = im.decodeImage(file.readAsBytesSync());
io.File('$path/${DateTime.now().toIso8601String()}.png')
..writeAsBytesSync(im.encodePng(image));
}