Исключение файловой системы: Ошибка операционной системы: отказано в разрешении в Google Pixel 3

#flutter #google-pixel

#flutter #google-pixel

Вопрос:

Я получаю эту ошибку при попытке получить дерево файлов

Я использую эти плагины в своем проекте:

path_provider: ^0.5.0 1

simple_permissions: ^0.1.9

 import 'package:path_provider/path_provider.dart';
import 'package:simple_permissions/simple_permissions.dart';

...

static Future<String> get localPath async {
  final directory = await getApplicationDocumentsDirectory();
  return directory.path;
}

final List<FileSystemEntity> files = List<FileSystemEntity>();
Directory parent;

@override
Widget build(BuildContext context) {
  if (parent == null) {
    SimplePermissions
        .requestPermission(Permission.WriteExternalStorage)
        .then((value) {
      if (value == PermissionStatus.authorized) {
        localPath.then((String value) {
          Directory dir = Directory(value);
          while (dir.path != dir.parent.path) {
            dir = dir.parent;
          }
          parent = dir;
          setState(() {
            files.addAll(dir.listSync());
            sortFiles();
          });
        });
      } else {
        SimplePermissions.openSettings();
      }
    });
  }
  return Scaffold(...)
}
  

На Nexus 5 это работает абсолютно нормально, но на Pixel 3 я получаю сообщение об ошибке

[ОШИБКА: flutter/lib/ui/ui_dart_state.cc(148)] Необработанное исключение: исключение FileSystemException: не удалось составить список каталогов, path = ‘/’ (Ошибка операционной системы: отказано в разрешении, errno = 13)

Ошибка, вызванная dir.listSync()

Кто-нибудь знает, как это решить?

Ответ №1:

dir.listSync() может возвращать исключение, поэтому вам нужно проверить каждый родительский каталог, доступен ли он для получения файлов внутри него