Flutter文件选择插件file_picker_patch的使用

Flutter文件选择插件file_picker_patch的使用

fluter_file_picker

File Picker Awesome Flutter Build Status Donate

File Picker - Patch

Flutter插件基于 file_picker 插件进行修补以修复问题:

  1. Android - 在选择多个文件时崩溃
  2. iOS - 在iOS版本<14上选择文件后出现黑屏

该包允许你使用原生文件浏览器来选择单个或多个文件,并支持扩展名过滤。

当前支持的功能

  • 使用操作系统默认的原生选择器
  • 使用自定义格式过滤选择文件 - 可以提供一个文件扩展名列表(如pdf, svg, zip等)
  • 从云文件(如GDrive, Dropbox, iCloud)选择文件
  • 单个或多个文件选择
  • 不同的默认类型过滤(媒体、图像、视频、音频或任意)
  • 选择目录
  • Flutter Web
  • 桌面端(通过Flutter Go实现的MacOS, Linux和Windows)
  • 如果需要,可以立即将文件数据加载到内存中(使用Uint8List

如果你有任何希望在此包中看到的功能,请随时提出建议。🎉

文档

查看 File Picker Wiki 获取有关安装、设置和使用的详细信息。

File Picker Wiki

  1. 安装
  2. 设置
  3. API
  4. 常见问题解答
  5. 故障排除

使用

快速简单的使用示例:

单个文件

FilePickerResult? result = await FilePicker.platform.pickFiles();

if(result != null) {
   File file = File(result.files.single.path);
} else {
   // 用户取消了选择
}

多个文件

FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true);

if(result != null) {
   List&lt;File&gt; files = result.paths.map((path) =&gt; File(path)).toList();
} else {
   // 用户取消了选择
}

带扩展名过滤的多个文件

FilePickerResult? result = await FilePicker.platform.pickFiles(
          type: FileType.custom,
          allowedExtensions: ['jpg', 'pdf', 'doc'],
        );

加载结果和文件详情

FilePickerResult? result = await FilePicker.platform.pickFiles();

if(result != null) {
   PlatformFile file = result.files.first;
   
   print(file.name);
   print(file.bytes);
   print(file.size);
   print(file.extension);
   print(file.path);
} else {
   // 用户取消了选择
}

使用Flutter Web选择并上传文件到Firebase Storage

FilePickerResult? result = await FilePicker.platform.pickFiles();

if (result != null) {
  Uint8List fileBytes = result.files.first.bytes;
  String fileName = result.files.first.name;
  
  // 上传文件
  await FirebaseStorage.instance.ref('uploads/$fileName').putData(fileBytes);
}

更多关于Flutter文件选择插件file_picker_patch的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文件选择插件file_picker_patch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


file_picker_patch 是 Flutter 中一个用于文件选择的插件。它是对 file_picker 插件的一个修补版本,主要用于解决某些特定问题或添加特定功能。使用 file_picker_patch 与使用 file_picker 插件非常相似,以下是如何在 Flutter 项目中使用 file_picker_patch 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 file_picker_patch 的依赖:

dependencies:
  flutter:
    sdk: flutter
  file_picker_patch: ^<latest_version>

运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 file_picker_patch

import 'package:file_picker_patch/file_picker_patch.dart';

3. 使用 FilePickerPatch 选择文件

你可以使用 FilePickerPatch 来选择文件。以下是一个简单的示例,展示了如何选择单个文件:

void pickFile() async {
  FilePickerResult? result = await FilePickerPatch.platform.pickFiles();

  if (result != null) {
    PlatformFile file = result.files.first;
    print('File name: ${file.name}');
    print('File size: ${file.size}');
    print('File path: ${file.path}');
  } else {
    // User canceled the picker
    print('User canceled the file picker');
  }
}

4. 选择多个文件

如果你想选择多个文件,可以使用 allowMultiple: true 参数:

void pickMultipleFiles() async {
  FilePickerResult? result = await FilePickerPatch.platform.pickFiles(
    allowMultiple: true,
  );

  if (result != null) {
    List<PlatformFile> files = result.files;
    for (var file in files) {
      print('File name: ${file.name}');
      print('File size: ${file.size}');
      print('File path: ${file.path}');
    }
  } else {
    // User canceled the picker
    print('User canceled the file picker');
  }
}

5. 选择特定类型的文件

你可以通过 type 参数来限制用户只能选择特定类型的文件。例如,限制用户只能选择图片文件:

void pickImage() async {
  FilePickerResult? result = await FilePickerPatch.platform.pickFiles(
    type: FileType.image,
  );

  if (result != null) {
    PlatformFile file = result.files.first;
    print('File name: ${file.name}');
    print('File size: ${file.size}');
    print('File path: ${file.path}');
  } else {
    // User canceled the picker
    print('User canceled the file picker');
  }
}

6. 获取文件的字节数据

你可以通过 FilePickerResult 获取文件的字节数据:

void pickFileAndGetBytes() async {
  FilePickerResult? result = await FilePickerPatch.platform.pickFiles();

  if (result != null) {
    PlatformFile file = result.files.first;
    Uint8List? fileBytes = file.bytes;
    if (fileBytes != null) {
      print('File bytes: ${fileBytes.length}');
    }
  } else {
    // User canceled the picker
    print('User canceled the file picker');
  }
}
回到顶部