Flutter文件下载通知插件download_notification的使用

Flutter文件下载通知插件download_notification的使用

强大的库用于跨平台下载通知

该库允许你在所有平台上(可能)在下载过程完成后发送通知。此库是从pub.dev上的其他几个代码源中提取的。

安装

安装库

// 在pubspec.yaml文件中添加依赖
dependencies:
  download_notification: ^latest

初始化库

main.dart文件中初始化通知库:

void main() {
  NotificationUtils().configuration();
  runApp(MyApp());
}

下载任务

定义一个下载任务函数:

var url4 = "https://go.microsoft.com/fwlink/?LinkID=521962";
var savedDir = "";

void downloadTask() async {
  await DownloadManager().addDownload(
    url4,
    "$savedDir/sampledata.xlsx",
    "APP NAME",
    "BODY NAME"
  );
}

获取下载目录

获取设备的下载目录路径:

[@override](/user/override)
void initState() {
  getDownloadsDirectory().then((value) => savedDir = value!.path);
  super.initState();
}

完整示例

以下是一个完整的示例,展示了如何使用 download_notification 插件来实现文件下载并接收通知。

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:download_notification/flutter_download_notification.dart';
import 'package:path_provider/path_provider.dart';
import 'package:http/http.dart' as http;

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const Sample(),
    );
  }
}

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

  [@override](/user/override)
  State<Sample> createState() => _SampleState();
}

class _SampleState extends State<Sample> {
  var url4 = "https://go.microsoft.com/fwlink/?LinkID=521962";
  var savedDir = "";
  var downloadManager = DownloadManager();

  void downloadTask() async {
    await DownloadManager().addDownload(
      url4,
      "$savedDir/sampledata.xlsx",
      "APP NAME",
      "BODY NAME"
    );
  }

  [@override](/user/override)
  void initState() {
    getDownloadsDirectory().then((value) => savedDir = value!.path);
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Container(
        child: ElevatedButton(
          onPressed: () {
            downloadTask();
          },
          child: Text("下载"),
        ),
      ),
    );
  }
}

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

1 回复

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


download_notification 是一个 Flutter 插件,用于在文件下载时显示通知。它可以帮助你在后台下载文件时,通知用户下载进度,并在下载完成后提供通知,方便用户查看或打开下载的文件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  download_notification: ^0.0.1  # 请根据最新版本号进行替换

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

2. 配置 Android

在 Android 项目中,你需要配置通知渠道。打开 android/app/src/main/AndroidManifest.xml 文件,添加以下代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.your_app_name">

    <application
        android:label="Your App Name"
        android:icon="@mipmap/ic_launcher">
        
        <service
            android:name="com.example.your_app_name.DownloadService"
            android:exported="false" />
            
        <receiver
            android:name="com.example.your_app_name.DownloadBroadcastReceiver"
            android:exported="false" />
            
    </application>
</manifest>

3. 使用插件

在 Dart 代码中,你可以使用 download_notification 插件来下载文件并显示通知。

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

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

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

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('File Download Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            String url = 'https://example.com/file.zip';
            String savePath = '/storage/emulated/0/Download/file.zip';

            await DownloadNotification.download(
              url: url,
              savePath: savePath,
              notificationTitle: 'Downloading File',
              notificationDescription: 'Your file is being downloaded',
              showProgress: true,
            );
          },
          child: Text('Download File'),
        ),
      ),
    );
  }
}

4. 解释代码

  • DownloadNotification.download 方法用于启动下载任务。你需要提供以下参数:
    • url: 文件的下载链接。
    • savePath: 文件保存的路径。
    • notificationTitle: 通知的标题。
    • notificationDescription: 通知的描述。
    • showProgress: 是否显示下载进度。

5. 处理下载完成

你可以通过监听 DownloadNotification.onDownloadComplete 来处理下载完成的事件:

DownloadNotification.onDownloadComplete.listen((event) {
  print('File downloaded: ${event.path}');
  // 你可以在这里打开文件或显示一个通知
});

6. 处理下载失败

你可以通过监听 DownloadNotification.onDownloadFailed 来处理下载失败的事件:

DownloadNotification.onDownloadFailed.listen((event) {
  print('Download failed: ${event.error}');
  // 你可以在这里显示一个错误通知
});
回到顶部