Flutter文件保存插件flutter_file_saver的使用

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

Flutter文件保存插件flutter_file_saver的使用

flutter_file_saver 是一个Flutter插件,它提供了一种在设备上保存文件的方法。本文将详细介绍如何使用此插件,并提供一个完整的示例demo。

插件信息

  • melos
  • Pub Version

平台支持

方法/平台 Android iOS Web Windows Linux MacOS
writeFileAsBytes ❌️ ❌️
writeFileAsString ❌️ ❌️

入门指南

导入包

在您的pubspec.yaml文件中添加依赖:

dependencies:
    flutter_file_saver: any

平台设置

Android 设置

android/app/build.gradle中设置最低SDK版本为19:

android {
    defaultConfig {
        minSdkVersion 19
    }
}

查看完整示例

iOS 设置

ios/Runner/Info.plist中添加以下权限:

<key>UISupportsDocumentBrowser</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

查看完整示例

MacOS 设置

macos/Runner/DebugProfile.entitlements中添加以下权限:

<key>com.apple.security.files.user-selected.read-write</key>
<true/>

查看完整示例

方法介绍

writeFileAsBytes

Uint8List写入文件到设备:

FlutterFileSaver().writeFileAsBytes(
    fileName: 'file.txt',
    bytes: fileBytes,
);

writeFileAsString

String写入文件到设备(大多数情况下会将数据转换并调用writeFileAsBytes):

FlutterFileSaver().writeFileAsString(
    fileName: 'file.txt',
    string: 'Hello World!',
);

待办事项

  • 支持Windows和Linux
  • 支持自定义本地路径

示例代码

下面是一个完整的示例,展示了如何在Flutter应用中使用flutter_file_saver插件来保存文件:

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: MyHomePage());
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _fileSaverPlugin = FlutterFileSaver();
  final _formKey = GlobalKey<FormState>();

  String? _fileName;
  String? _fileContent;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Form(
          key: _formKey,
          child: Padding(
            padding: const EdgeInsets.all(16),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                TextFormField(
                  initialValue: 'test',
                  decoration: const InputDecoration(labelText: 'File name'),
                  validator: (value) =>
                      value != null && value.isNotEmpty ? null : 'File name is required',
                  onSaved: (val) => _fileName = val,
                ),
                TextFormField(
                  initialValue: 'test',
                  decoration: const InputDecoration(labelText: 'File content'),
                  validator: (value) =>
                      value != null && value.isNotEmpty ? null : 'File content is required',
                  onSaved: (val) => _fileContent = val,
                ),
              ],
            ),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _downloadFile,
        tooltip: 'Download',
        child: const Icon(Icons.download),
      ),
    );
  }

  Future<void> _downloadFile() async {
    final formState = _formKey.currentState!;
    if (formState.validate()) {
      formState.save();
      final path = await _fileSaverPlugin.writeFileAsString(
        fileName: '$_fileName.txt',
        data: _fileContent!,
      );
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('File saved to $path')),
      );
    }
  }
}

以上就是flutter_file_saver插件的详细使用说明及示例代码,希望对您有所帮助。


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

1 回复

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


当然,下面是一个关于如何使用Flutter文件保存插件flutter_file_saver的代码示例。这个插件允许你将文件保存到设备的存储中。

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

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

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

接下来,是一个完整的Flutter应用示例,演示如何使用flutter_file_saver来保存一个文本文件:

import 'package:flutter/material.dart';
import 'package:flutter_file_saver/flutter_file_saver.dart';
import 'package:path_provider/path_provider.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter File Saver Example'),
        ),
        body: Center(
          child: SaveFileButton(),
        ),
      ),
    );
  }
}

class SaveFileButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        try {
          // 获取应用的文档目录
          final directory = await getApplicationDocumentsDirectory();
          
          // 定义文件路径和文件名
          final filePath = "${directory.path}/example.txt";
          
          // 要写入文件的内容
          final content = "Hello, this is a sample text file!";
          
          // 将内容写入文件
          final file = File(filePath);
          await file.writeAsString(content);
          
          // 使用flutter_file_saver保存文件
          final result = await FileSaver.saveFile(
            file: file,
            defaultName: 'example.txt',
            mimeType: 'text/plain',
            extension: 'txt',
          );
          
          // 显示保存结果
          if (result.saved) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(
                content: Text('File saved successfully!'),
                duration: Duration(seconds: 2),
              ),
            );
          } else {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(
                content: Text('Failed to save file.'),
                duration: Duration(seconds: 2),
                backgroundColor: Colors.red,
              ),
            );
          }
        } catch (e) {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
              content: Text('Error: $e'),
              duration: Duration(seconds: 2),
              backgroundColor: Colors.red,
            ),
          );
        }
      },
      child: Text('Save File'),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含一个按钮。点击按钮时,应用将执行以下操作:

  1. 使用path_provider插件获取应用的文档目录。
  2. 定义文件的路径和文件名。
  3. 创建一个包含示例文本内容的文件,并将其写入到指定路径。
  4. 使用flutter_file_saver插件的saveFile方法将文件保存到设备的存储中。
  5. 根据保存操作的结果,显示相应的SnackBar消息。

这个示例展示了如何使用flutter_file_saver插件进行文件保存操作。根据你的需求,你可以调整文件内容、路径和文件名等参数。

回到顶部