Flutter文件选择插件pfile_picker的使用

Flutter文件选择插件file_picker的使用

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

当前支持的功能

  • 使用操作系统默认的原生选择器
  • 支持多种平台(移动端、Web端、桌面端和Flutter GO)
  • 通过自定义格式过滤选择文件——可以提供文件扩展名列表(如pdf、svg、zip等)
  • 从云文件(如GDrive、Dropbox、iCloud)选择文件
  • 单个或多个文件选择
  • 不同的默认类型过滤(媒体、图像、视频、音频或任何类型)
  • 选择目录
  • 如果需要,立即把文件数据加载到内存(Uint8List
  • 打开保存文件/另存为对话框(让用户指定要保存的驱动器、目录和文件名)

如果你希望在这个包中看到某个功能,请随时提出建议。🎉

兼容性图表

API Android iOS Linux macOS Windows Web
clearTemporaryFiles()
getDirectoryPath()
pickFiles()
saveFile()

更多详细信息,请查看File Picker Wiki官方API引用

文档

更多关于安装、设置和使用的细节,请查看File Picker Wiki

安装

设置

API

常见问题

故障排除

使用

简单的使用示例

单个文件
FilePickerResult? result = await FilePicker.platform.pickFiles();

if (result != null) {
  File file = File(result.files.single.path); // 获取选中的文件路径并创建File对象
} else {
  // 用户取消了选择
}
多个文件
FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true);

if (result != null) {
  List<File> files = result.paths.map((path) => File(path)).toList(); // 将结果转换为File列表
} else {
  // 用户取消了选择
}
多个文件带扩展名过滤
FilePickerResult? result = await FilePicker.platform.pickFiles(
  type: FileType.custom, // 自定义文件类型过滤
  allowedExtensions: ['jpg', 'pdf', 'doc'], // 允许的扩展名
);
选择目录
String? selectedDirectory = await FilePicker.platform.getDirectoryPath();

if (selectedDirectory == null) {
  // 用户取消了选择
}
保存文件/另存为对话框
String? outputFile = await FilePicker.platform.saveFile(
  dialogTitle: '请选择输出文件:', // 对话框标题
  fileName: 'output-file.pdf', // 默认文件名
);

if (outputFile == null) {
  // 用户取消了选择
}
加载结果和文件详情
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文件选择插件pfile_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


pfile_picker 是一个用于 Flutter 的文件选择插件,允许用户从设备的文件系统中选择文件。以下是使用 pfile_picker 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  pfile_picker: ^0.0.1 # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 pfile_picker 插件:

import 'package:pfile_picker/pfile_picker.dart';

3. 使用 pfile_picker 选择文件

你可以使用 pfile_picker 来让用户选择文件。以下是一个简单的示例,展示如何使用 pfile_picker 选择文件并获取文件路径:

import 'package:flutter/material.dart';
import 'package:pfile_picker/pfile_picker.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FilePickerDemo(),
    );
  }
}

class FilePickerDemo extends StatefulWidget {
  [@override](/user/override)
  _FilePickerDemoState createState() => _FilePickerDemoState();
}

class _FilePickerDemoState extends State<FilePickerDemo> {
  String? _filePath;

  Future<void> _pickFile() async {
    try {
      FilePickerResult? result = await PFilePicker.platform.pickFiles();

      if (result != null) {
        setState(() {
          _filePath = result.files.single.path;
        });
      } else {
        // 用户取消了选择
        setState(() {
          _filePath = null;
        });
      }
    } catch (e) {
      print("文件选择失败: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('文件选择示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (_filePath != null)
              Text('选择的文件路径: $_filePath')
            else
              Text('未选择文件'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pickFile,
              child: Text('选择文件'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部