【问题标题】:E/LB: fail to open file: No such file or directory - FlutterE / LB:无法打开文件:没有这样的文件或目录 - Flutter
【发布时间】:2022-10-21 18:16:40
【问题描述】:

我尝试从文件目录('/storage/emulated/0/WhatsApp/Media/.Statuses')显示whatsapp状态图像。
但是没有出现任何图像。控制台显示 =>“无法打开文件:没有这样的文件或目录”.

我也将文件路径更改为 DCIM('/storage/emulated/0/DCIM/Camera/'),并且可以显示图像。

这里有什么问题?

我的代码:

final Directory _photoDir = new Directory(
      '/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/.Statuses/');

  @override
  Widget build(BuildContext context) {
    if (!Directory("${_photoDir.path}").existsSync()) {
      return Container(
        child: Center(
          child: Text("install WhatsApp\nsee your friends status here!"),
        ),
      );
    } else {
      print(_photoDir.path);
      var imageList = _photoDir
          .listSync()
          .map((item) => item.path)
          .where((item) => item.endsWith(".jpg"))
          .toList(growable: false);
      print(imageList.length);

      if (imageList.length > 0) {
        return GridView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 3,
            crossAxisSpacing: 5.0,
            mainAxisSpacing: 5.0,
          ),
          itemCount: imageList.length,
          itemBuilder: (context, index) {
            String imgPath = imageList[index];
            return Hero(
                tag: imgPath,
                child: Image.file(
                  File(imgPath),
                  fit: BoxFit.fill,
                ));
          },
        );
      } else {
        return Container(
          child: Center(
            child: Text("Sorry No Status found..!"),
          ),
        );
      }
    }
  }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
<!-- Permissions options for the `storage` group -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

获得许可

  Future<void> requestLocationPermission() async {
    final status = await Permission.storage.request();
    Permission.photos.request();

    if (status == PermissionStatus.granted) {
      print('Permission Granted');
    } else if (status == PermissionStatus.denied) {
      print('Permission denied');
    } else if (status == PermissionStatus.permanentlyDenied) {
      print('Permission Permanently Denied');
      await openAppSettings();
    }
  }

  @override
  void initState() {
    super.initState();
    requestLocationPermission();
  }

【问题讨论】:

  • 在尝试使用文件之前使用 File.exists() 如果它也存在 File.canRead() 。
  • 您在 Android 11+ 设备上执行此操作?
  • 是的,我在 android 11 上运行它。

标签: android flutter dart local-storage


【解决方案1】:

我觉得。您选择的目录是一个隐藏文件目录。所以你不能得到那个文件。我不确定尝试另一个目录。

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 2018-01-20
    • 1970-01-01
    • 2023-04-06
    • 2019-04-07
    • 2017-05-04
    相关资源
    最近更新 更多