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("选择文件"), // 文本在右侧
            ],
          ),
        ),
      ),

    );
  }
}

 

三,测试效果

posted @ 2025-03-29 09:03  刘宏缔的架构森林  阅读(358)  评论(0)    收藏  举报