flutter:用file_picker选择文件
一,安装
包地址:
https://pub.dev/packages/file_picker
编辑pubspec.yaml
dependencies:
flutter:
sdk: flutter
file_picker: ^9.2.1
然后点击 pub get
各功能的兼容性如下:

二,代码
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:permission_handler/permission_handler.dart';
class PickerPage extends StatefulWidget {
final Map arguments;
// 为title设置一个默认参数,这样的跳转该界面时可以不传值。
PickerPage({super.key, required this.arguments});
@override
State<PickerPage> createState() => _PickerPageState();
}
class _PickerPageState extends State<PickerPage> {
//判断权限,无权限时则请求权限,
Future<void> _requestPermission() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
print("未授权访问存储,开始请求");
await Permission.storage.request();
} else {
print("已授权访问存储");
}
}
//打开文件选择窗口
openFilePicker() async {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
final files = result.files[0];
print("选中了文件:");
print(files.path);
return files.path;
} else {
//未选择任何文件
print('未选择文件');
return "";
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.primaryContainer,
title: Text(widget.arguments["title"]),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
print("开始请求权限");
await _requestPermission();
print("开始选择文件");
var fileName = openFilePicker();
print(fileName);
},
child: Row(
mainAxisSize: MainAxisSize.min, // 根据内容调整大小
children: <Widget>[
Icon(Icons.add), // 图标在左侧
SizedBox(width: 10), // 可选:添加一些间隔
Text("选择文件"), // 文本在右侧
],
),
),
),
);
}
}
三,测试效果


浙公网安备 33010602011771号