Flutter文件夹文件保存插件folder_file_saver的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter文件夹文件保存插件folder_file_saver的使用

简介

folder_file_saver 是一个用于在Flutter应用中保存文件到指定文件夹的插件。它支持从URL下载文件,并将其显示在图库或媒体播放器中,还可以将现有文件复制到新文件夹,创建自定义目录等。

插件功能

  • 从URL保存文件
  • 显示从URL下载的文件在图库和媒体播放器中
  • 将现有文件复制到新文件夹
  • 创建文件夹
    • 对于Android Q或更高版本:
      • jpg, png, jpeg 文件存储在 Pictures/appname Pictures
      • mp4 文件存储在 Videos/appname Videos
      • mp3 文件存储在 Musics/appname Musics
      • m4a 文件存储在 Audiobooks/appname Audios
      • 其他扩展名文件存储在 Documents/appname Documents
    • 对于低于Android Q的版本:
      • jpg, png, jpeg 文件存储在 appname/Pictures
      • mp4 文件存储在 appname/Videos
      • mp3 文件存储在 appname/Musics
      • m4a 文件存储在 appname/Audios
      • 其他扩展名文件存储在 appname/Documents
  • 保存文件到自定义目录
  • 下载并调整图像大小
  • 打开设备设置

平台支持

  • Android:需要在 AndroidManifest.xml 中添加权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  • iOS:当前不支持

示例代码

以下是一个完整的示例demo,展示如何使用 folder_file_saver 插件:

步骤

  1. 克隆示例项目:
    git clone https://github.com/bonamoogy/FolderFileSaver/archive/master.zip
    
  2. 进入项目目录:
    cd folder_file_saver
    
  3. 获取依赖包:
    flutter pub get
    
  4. 运行项目:
    flutter run
    

示例代码

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Folder File Saver Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future<void> _saveFileFromUrl() async {
    String url = "https://example.com/sample.jpg";
    String fileName = "sample.jpg";
    await FolderFileSaver.saveFileFromUrl(url, fileName);
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('File saved successfully')));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Folder File Saver Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _saveFileFromUrl,
          child: Text('Save File from URL'),
        ),
      ),
    );
  }
}

注意事项

  • 确保在 AndroidManifest.xml 中添加了必要的权限。
  • 当前插件仅支持Android平台,iOS平台尚未实现。

更多详细信息请参考 官方文档GitHub仓库


这个Markdown文档详细介绍了如何使用 `folder_file_saver` 插件,并提供了一个完整的示例代码来演示其基本功能。希望这对您有所帮助!

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

1 回复

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


当然,以下是如何在Flutter应用中使用folder_file_saver插件来保存文件到指定文件夹的示例代码。这个插件允许用户选择一个文件夹并将文件保存到该文件夹。

首先,确保你已经在pubspec.yaml文件中添加了folder_file_saver依赖:

dependencies:
  flutter:
    sdk: flutter
  folder_file_saver: ^x.y.z  # 请替换为最新版本号

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

接下来,在你的Dart代码中,你可以按照以下步骤使用folder_file_saver插件:

  1. 导入插件:
import 'package:folder_file_saver/folder_file_saver.dart';
import 'dart:io';
  1. 请求权限并保存文件:
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart'; // 用于请求存储权限
import 'package:folder_file_saver/folder_file_saver.dart';
import 'dart:io';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SaveFileScreen(),
    );
  }
}

class SaveFileScreen extends StatefulWidget {
  @override
  _SaveFileScreenState createState() => _SaveFileScreenState();
}

class _SaveFileScreenState extends State<SaveFileScreen> {
  Future<void> _saveFile() async {
    // 请求存储权限
    var status = await Permission.storage.status;
    if (!status.isGranted) {
      var result = await Permission.storage.request();
      if (!result.isGranted) {
        return; // 用户拒绝权限请求
      }
    }

    // 准备要保存的文件内容
    String content = "Hello, this is a test file!";
    ByteData byteData = Uint8List.fromList(content.codeUnits).buffer.asByteData();

    // 使用folder_file_saver保存文件
    try {
      String? filePath = await FolderFileSaver.saveFile(
        fileName: "test_file.txt",
        extension: "txt",
        byteData: byteData,
        description: "This is a test file",
      );

      if (filePath != null) {
        File file = File(filePath);
        print("File saved successfully at: $filePath");
        // 你可以在这里添加其他逻辑,比如显示SnackBar通知用户
      } else {
        print("File saving was cancelled by the user.");
      }
    } catch (e) {
      print("Error saving file: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Save File Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _saveFile,
          child: Text('Save File'),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入必要的包。
  2. _saveFile方法中,首先请求存储权限。如果用户未授予权限,则请求权限。
  3. 准备要保存的文件内容,并将其转换为ByteData
  4. 使用FolderFileSaver.saveFile方法保存文件,并处理结果。
  5. 在UI中提供一个按钮来触发文件保存操作。

注意:

  • folder_file_saver插件在Android和iOS上的行为可能略有不同,确保你在不同的平台上测试你的应用。
  • 在实际应用中,你可能需要更细致地处理权限请求的结果,以及文件保存操作的错误情况。

希望这个示例能帮你理解如何在Flutter应用中使用folder_file_saver插件来保存文件。

回到顶部