Флаттер создает папку после установки - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать папку после установки приложения. например, как этот вопрос

Создать папку при установке приложения

я следую два решения

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));
  }
...