Flutter文件保存插件simple_file_saver_android的使用

Flutter文件保存插件simple_file_saver_android的使用

该插件是<a href="https://pub.dev/packages/simple_file_saver">simple_file_saver</a>的Android实现。

使用方法

此包是推荐插件,这意味着你可以直接使用simple_file_saver。当你这样做时,这个包会自动包含在你的应用中,因此你无需将其添加到pubspec.yaml文件中。

然而,如果你导入此包以直接使用其API,则应像往常一样将其添加到pubspec.yaml文件中。

完整示例

以下是一个完整的示例代码,展示了如何使用simple_file_saver来保存文件:

import 'dart:convert';

import 'package:flutter/material.dart';

import 'package:simple_file_saver_platform_interface/simple_file_saver_platform_interface.dart';

// 测试URL,用于从网络下载文件并保存
const testUrl = 'https://cdn.glitch.me/4c9ebeb9-8b9a-4adc-ad0a-238d9ae00bb5%2Fmdn_logo-only_color.svg';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Simple File Saver Demo'),
        ),
        body: Builder(builder: (context) {
          return Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                // 按钮:点击保存文件(从字节)
                TextButton(
                  child: const Text('点击保存文件(从字节)'),
                  onPressed: () async {
                    final result = await SimpleFileSaverPlatform.instance.saveFile(
                      fileInfo: FileSaveInfo.fromBytes(
                        bytes: utf8.encode('Simple file saver test'), // 转换为字节
                        basename: 'test_save_from_bytes', // 文件名
                        extension: 'txt', // 文件扩展名
                      ),
                    );
                    if (context.mounted) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(
                          content: Text('文件已保存到路径: $result'),
                        ),
                      );
                    }
                  },
                ),
                const SizedBox(height: 20),
                
                // 按钮:点击另存为文件(从字节)
                TextButton(
                  child: const Text('点击另存为文件(从字节)'),
                  onPressed: () async {
                    final result = await SimpleFileSaverPlatform.instance.saveFile(
                      fileInfo: FileSaveInfo.fromBytes(
                        bytes: utf8.encode('Simple file saver test'),
                        basename: 'test_save_as_from_bytes',
                        extension: 'txt',
                      ),
                      saveAs: true, // 弹出另存为对话框
                    );
                    if (context.mounted) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(
                          content: Text('文件已保存到路径: $result'),
                        ),
                      );
                    }
                  },
                ),
                const SizedBox(height: 20),
                
                // 按钮:点击保存文件(从URL)
                TextButton(
                  child: const Text('点击保存文件(从URL)'),
                  onPressed: () async {
                    final result = await SimpleFileSaverPlatform.instance.saveFile(
                      fileInfo: FileSaveInfo.fromUrl(
                        url: testUrl,
                        basename: 'test_save_from_url',
                        extension: 'svg',
                      ),
                    );
                    if (context.mounted) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(
                          content: Text('文件已保存到路径: $result'),
                        ),
                      );
                    }
                  },
                ),
                const SizedBox(height: 20),
                
                // 按钮:点击另存为文件(从URL)
                TextButton(
                  child: const Text('点击另存为文件(从URL)'),
                  onPressed: () async {
                    final result = await SimpleFileSaverPlatform.instance.saveFile(
                      fileInfo: FileSaveInfo.fromUrl(
                        url: testUrl,
                        basename: 'test_save_as_from_url',
                        extension: 'svg',
                      ),
                      saveAs: true, // 弹出另存为对话框
                    );
                    if (context.mounted) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(
                          content: Text('文件已保存到路径: $result'),
                        ),
                      );
                    }
                  },
                ),
              ],
            ),
          );
        }),
      ),
    );
  }
}

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

1 回复

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


simple_file_saver_android 是一个用于在 Android 平台上保存文件的 Flutter 插件。它简化了文件保存的过程,使得开发者可以轻松地将文件保存到设备的存储中。以下是如何使用 simple_file_saver_android 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  simple_file_saver_android: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

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

import 'package:simple_file_saver_android/simple_file_saver_android.dart';

3. 保存文件

使用 SimpleFileSaverAndroid.saveFile 方法来保存文件。你需要提供文件的名称、MIME 类型以及文件的字节数据。

以下是一个简单的示例,展示如何保存一个文本文件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Simple File Saver Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 要保存的文件内容
              String content = "Hello, World!";
              List<int> bytes = content.codeUnits;

              // 保存文件
              bool? result = await SimpleFileSaverAndroid.saveFile(
                fileName: 'example.txt',
                mimeType: 'text/plain',
                bytes: bytes,
              );

              if (result == true) {
                print('文件保存成功');
              } else {
                print('文件保存失败');
              }
            },
            child: Text('保存文件'),
          ),
        ),
      ),
    );
  }
}

4. 权限处理

在 Android 10 及以上版本,保存文件到外部存储可能需要请求权限。确保你在 AndroidManifest.xml 中添加了以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
回到顶部