Flutter本地通知插件djangoflow_local_notification的使用

Flutter本地通知插件djangoflow_local_notification的使用

DjangoFlow Logo

DjangoFlow Local Notification Package

📬 一款为Flutter移动应用设计的流线型且灵活的本地通知解决方案,无缝集成DjangoFlow框架,支持动态通知操作。


✨ 功能

  • 通过`NotificationInitializer`轻松初始化本地通知插件。
  • 无缝集成DjangoFlow框架和`djangoflow_openapi`包。
  • 定义并管理互动通知的推送操作类别。
  • 方便处理通知数据负载和操作。
  • 使用`ImageDownloader`下载并附加图像到通知中。
  • 模块化结构,代码整洁且有条理。

🚀 安装

pubspec.yaml文件中添加以下依赖项:

dependencies:
  djangoflow_local_notification: ^latest_version

注意:此插件仅适用于Android和iOS平台。它在底层使用了flutter_local_notifications。您可以参考其文档进行平台特定的设置和问题排查。

🔧 使用

1. 初始化通知

import 'package:djangoflow_local_notification/djangoflow_local_notification.dart';

// 初始化通知
final notificationInitializer = NotificationInitializer();
await notificationInitializer.initialize(
  pushActions: pushActionCategories, // List<PushActionCategory>
  defaultAndroidNotificationIcon: 'app_icon',
);

2. 加载推送操作类别

import 'package:djangoflow_local_notification/djangoflow_local_notification.dart';

final actionCategoryCubit = ActionCategoryCubit.instance;

// 加载推送操作类别
await actionCategoryCubit.load();

3. 显示本地通知

import 'package:djangoflow_local_notification/djangoflow_local_notification.dart';

final localNotificationCubit = LocalNotificationCubit.instance;

await localNotificationCubit.displayNotification(
  notificationDetailsBuilder: () async {
    // 构建NotificationDetails
    return NotificationDetails(/*...*/);
  },
  id: 1,
  title: '通知标题',
  body: '通知正文',
  payload: 'payload_data',
);

🎨 自定义

  • 使用`NotificationDetails`自定义通知外观。
  • 为互动通知使用自定义的操作类别和操作。
  • 使用`ImageDownloader`将图像附加到通知中。

🛠 问题排查

Android - 发布模式下未找到通知图标

如果您在发布模式下的Android设备上遇到通知图标找不到的问题,可以尝试以下解决方法:

  1. 在您的Android项目的app/src/main/res/raw/目录下创建一个名为keep.xml的文件。
  2. keep.xml文件中添加以下内容(如果文件不存在则创建):
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@drawable/*,@raw/slow_spring_board" />

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

1 回复

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


djangoflow_local_notification 是一个 Flutter 插件,用于在应用中显示本地通知。它基于 flutter_local_notifications 插件,但提供了更简化的 API 和额外的功能。以下是如何使用 djangoflow_local_notification 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 djangoflow_local_notification 依赖:

dependencies:
  flutter:
    sdk: flutter
  djangoflow_local_notification: ^1.0.0

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

2. 初始化插件

在你的 Flutter 应用的主文件中初始化插件。通常在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化本地通知插件
  await DjangoflowLocalNotification.instance.initialize();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Local Notification Example',
      home: HomeScreen(),
    );
  }
}

3. 显示通知

你可以使用 DjangoflowLocalNotification.instance.show 方法来显示通知。以下是一个简单的示例:

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

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Local Notification Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 显示通知
            await DjangoflowLocalNotification.instance.show(
              id: 1,
              title: 'Hello!',
              body: 'This is a local notification.',
              payload: 'notification_payload',
            );
          },
          child: Text('Show Notification'),
        ),
      ),
    );
  }
}

4. 处理通知点击

你可以通过监听 onNotificationClick 流来处理通知的点击事件。在 main.dart 中添加以下代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化本地通知插件
  await DjangoflowLocalNotification.instance.initialize();

  // 监听通知点击事件
  DjangoflowLocalNotification.instance.onNotificationClick.listen((payload) {
    print('Notification clicked with payload: $payload');
    // 你可以在这里处理通知点击后的逻辑,例如导航到特定页面
  });

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Local Notification Example',
      home: HomeScreen(),
    );
  }
}

5. 其他功能

djangoflow_local_notification 还支持其他功能,例如:

  • 取消通知:使用 cancel 方法取消特定 ID 的通知。
  • 重复通知:通过设置 repeatInterval 参数来显示重复通知。
  • 自定义图标:通过 androidiOS 参数自定义通知图标。

示例代码

以下是一个完整的示例代码,展示了如何使用 djangoflow_local_notification 插件:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化本地通知插件
  await DjangoflowLocalNotification.instance.initialize();

  // 监听通知点击事件
  DjangoflowLocalNotification.instance.onNotificationClick.listen((payload) {
    print('Notification clicked with payload: $payload');
    // 你可以在这里处理通知点击后的逻辑,例如导航到特定页面
  });

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Local Notification Example',
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Local Notification Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                // 显示通知
                await DjangoflowLocalNotification.instance.show(
                  id: 1,
                  title: 'Hello!',
                  body: 'This is a local notification.',
                  payload: 'notification_payload',
                );
              },
              child: Text('Show Notification'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 取消通知
                await DjangoflowLocalNotification.instance.cancel(1);
              },
              child: Text('Cancel Notification'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部