Flutter文件下载插件file_downloader_flutter的使用

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

Flutter文件下载插件file_downloader_flutter的使用

file_downloader_flutter 是一个允许你在Flutter应用中从URL下载文件(如图片、文档等)的插件。

预览

The example app running in iOS

安装

1. 添加依赖到 pubspec.yaml

dependencies:
  file_downloader_flutter: <latest-version>

获取最新版本,请访问 pub.dev

2. 导入包

import 'package:file_downloader_flutter/file_downloader_flutter.dart';

3. 添加按钮点击事件

try {
  FileDownloaderFlutter().urlFileSaver(url: controller.text);
} catch(e) {
  print(e);
}

平台特定配置

Android

  1. android/app/build.gradle 文件中的最小Android SDK版本更改为21(或更高)。
    minSdkVersion 21
    
  2. AndroidManifest.xml 中添加 INTERNET 权限。
    <uses-permission android:name="android.permission.INTERNET" />
    

许可证

MIT License
Copyright (c) 2024 Divyang Parmar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 file_downloader_flutter 插件来下载文件。

import 'package:file_downloader_flutter/file_downloader_flutter.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'File saver',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Url to file saver'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(controller: controller),
              MaterialButton(
                onPressed: () {
                  try {
                    FileDownloaderFlutter().urlFileSaver(url: controller.text);
                  } catch (e) {
                    if (kDebugMode) {
                      print(e);
                    }
                  }
                },
                child: const Text("Save file"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含一个输入框和一个按钮。用户可以在输入框中输入文件的URL,点击按钮后,应用会调用 FileDownloaderFlutter().urlFileSaver 方法下载文件。


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

1 回复

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


当然,下面是一个关于如何使用 file_downloader_flutter 插件在 Flutter 中实现文件下载的示例代码。这个插件允许你从指定的 URL 下载文件并保存到设备的存储中。

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

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

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

接下来,我们编写一个示例代码,展示如何使用这个插件进行文件下载。

示例代码

  1. 导入必要的包

在你的 Dart 文件中导入必要的包:

import 'package:flutter/material.dart';
import 'package:file_downloader_flutter/file_downloader_flutter.dart';
import 'dart:io';
  1. 配置 FileDownloader

在应用启动时配置 FileDownloader

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // 配置下载路径,可以根据需求调整
  final baseDir = (await getApplicationDocumentsDirectory()).path;
  FileDownloader.instance.baseDownloadDir = Directory(baseDir);
  runApp(MyApp());
}
  1. 创建下载按钮

在你的 Flutter 组件中创建一个按钮来触发下载:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('File Downloader Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _downloadFile,
            child: Text('Download File'),
          ),
        ),
      ),
    );
  }

  void _downloadFile() async {
    String taskId;
    try {
      taskId = await FileDownloader.instance.createDownloadTask(
        url: 'https://example.com/path/to/your/file.zip', // 替换为实际的文件URL
        savedDir: (await getApplicationDocumentsDirectory()).path,
        fileName: 'file.zip', // 替换为你想要的文件名
        showNotification: true, // 是否在下载完成时显示通知
        openFileFromNotification: true, // 是否从通知中打开文件
      );

      // 监听下载状态
      FileDownloader.instance.listenProgress(
        taskId: taskId,
        onProgress: (progressData) {
          print('Download Progress: ${progressData.progress}');
        },
        onCompleted: (completionData) {
          print('Download completed: ${completionData.filePath}');
        },
        onError: (error, stackTrace) {
          print('Download error: $error');
        },
      );
    } catch (e) {
      print('Error creating download task: $e');
    }
  }
}

注意事项

  1. 权限:在 Android 上,你可能需要在 AndroidManifest.xml 中请求存储权限。iOS 通常不需要额外配置,因为 Flutter 使用的沙盒环境已经包含所需的权限。

  2. 错误处理:在生产代码中,确保添加适当的错误处理逻辑,以处理网络错误、存储错误等。

  3. 路径管理:根据实际需求管理下载文件的路径和名称,避免文件名冲突或路径无效的问题。

这个示例代码展示了如何使用 file_downloader_flutter 插件从指定的 URL 下载文件,并监听下载进度。你可以根据实际需求进一步扩展和修改这个示例。

回到顶部