downloads_path_provider - Ошибка ОС: в доступе отказано, номер ошибки = 13 - PullRequest
1 голос
/ 02 мая 2020

Я использую downloads_path_provider пакет для записи в каталог загрузки. Я настроил его так, как было рекомендовано <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> для проецирования AndroidManifest.xml

Но когда я пытаюсь написать, я получаю эту ошибку E/flutter (26091): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: FileSystemException: Cannot open file, path = '/storage/emulated/0/Download/secure-strorage-backup.txt' (OS Error: Permission denied, errno = 13)

вот код

  final file = _localFile;
  file.writeAsString('1234  5678\n');
  file.writeAsString('1234  5678\n');

  File get _localFile {
    final path = _downloadsDirectory.path;
    return File('$path/secure-strorage-backup.txt');
  }

Как я могу записать в папку загрузок?

AndroidManifest. xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.user.myappname">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Secure Storage"
        ...

вот как я получаю downloadsDirectory

  void initState() {
    super.initState();
    initDownloadsDirectoryState();
  }

  Future<void> initDownloadsDirectoryState() async {
    Directory downloadsDirectory;
    try {
      downloadsDirectory = await DownloadsPathProvider.downloadsDirectory;
    } on PlatformException {
      print('Could not get the downloads directory');
    }
    if (!mounted) return;
    setState(() {
      _downloadsDirectory = downloadsDirectory;
    });
  }

1 Ответ

1 голос
/ 02 мая 2020

Как уже упоминалось в этом ответе, вам также необходимо явно запросить у вашего пользователя разрешение на использование внешнего хранилища, вы можете использовать этот пакет для этого

Обновление:

этот пакет становится лучше и имеет лучший результат, вы можете использовать его так:

                  await Permission.storage.request();
                  Directory downloadsDirectory = await DownloadsPathProvider.downloadsDirectory;
                  final String path = downloadsDirectory.path;
                  final File file = File('$path/secure-strorage-backup.txt');
                  await file.writeAsString('1234  5678\n');
                  await file.writeAsString('1234  5678\n');
                  print(await file.readAsString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...