首页 > 解决方案 > Flutter - 无法使用文件选择器访问 iOS 设备中的照片库

问题描述

请问,有没有人能帮助我理解为什么在 iOS 中我只能访问 iCloud 文件?我需要用户能够从设备库中访问文件(视频和图像)。我不确定这是否是权限问题,但在 info.plist 文件中我有这个:

<key>NSCameraUsageDescription</key>
<string>Allows you to take a picture</string>
<key>NSMicrophoneUsageDescription</key>
<string>Allows you to record a voice</string>
<key>NSAppleMusicUsageDescription</key>
<string>Allows you to choose a music</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Allows you to choose a picture</string>
<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
    <string>fetch</string>
    <string>processing</string>
    <string>remote-notification</string>
</array>

在 Podfile 中,我也有这个:

目标 'Runner' 做 use_frameworks!

并在我的代码下方选择视频,最多5个文件,一一选择...

List<Files> _selectedFiles = [];

pickVideos() async {
if (_selectedFiles.length >= 5) {
  Toast.show(t.maximumallowedsizehint, context);
  return;
}
FilePickerResult result = await FilePicker.platform.pickFiles(
  type: FileType.custom,
  // allowCompression: true,
  allowMultiple: true,
  withData: false,
  allowedExtensions: ['mp4'],
);
if (mounted) {
  if (result != null) {
    PlatformFile file = result.files.first;

    print(file.name);
    //print(file.bytes);
    print(file.size);
    print(file.extension);
    print(file.path);
    if (file.size > (1024 * 100)) {
      Toast.show(t.maximumuploadsizehint, context);
      return;
    }

    final filePath = await FlutterAbsolutePath.getAbsolutePath(file.path);
    print("video absolute path " + filePath);
    _selectedFiles.add(new Files(
        link: filePath,
        type: "video",
        filetype: file.extension,
        length: file.size,
        thumbnail: "null"));
    //genThumbnailFile(_selectedFiles.length - 1);
  }
  setState(() {});
}

感谢您的任何帮助。

标签: flutterflutter-dependencies

解决方案


我已经联系了包所有者(Miguel Ruivo),他很乐意回答我提供解决方案。

而不是使用 FileType.custom

FilePickerResult result = await FilePicker.platform.pickFiles(type: FileType.custom);

使用 FileType.media:

FilePickerResult result = await FilePicker.platform.pickFiles(type: FileType.media);

这解决了我的问题!


推荐阅读