搜索插件、代码仓与 APP 分类

reflex 封面
插件详情v0.0.2

reflex

Flutter 插件,用于读取通知并自动回复自定义消息。

AndroidiOS
近 30 天下载
16
喜欢数
42
Pub 分数
130

安装插件

flutter pub add reflex

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Reflex 是一个 Flutter 插件,可让应用程序读取传入的通知并自动发送自定义回复。专为 Android 和 iOS 设计,它与系统级通知服务集成,以编程方式监控和响应消息。适用于聊天机器人、自动化客户支持或智能消息工作流,Reflex 让开发者能够构建对实时通知做出响应的应用程序。该插件是开源的,由 devsonflutter 维护,可通过 pub.dev 轻松集成。它支持两个平台,非常适合跨平台消息功能增强。

适合场景

  • 自动聊天机器人回复
  • 智能通知处理
  • 客户支持自动化
  • 实时消息监控
  • 跨平台消息应用

主要特点

  • 读取传入的通知
  • 自动回复自定义消息
  • 支持 Android 和 iOS
  • 开源且由社区驱动
  • 通过 pub.dev 的简单集成

适合对象

  • 开发聊天机器人
  • 需要自动响应的应用程序
  • 消息传递和支持工具
  • 跨平台通知系统
  • 面向自动化的Flutter项目

使用建议

  • 需要用户授权通知访问权限
  • 仅限系统通知读取
  • 可能不适用于所有设备制造商
  • 依赖于平台特定的后台执行
  • 隐私敏感的用例需要透明度

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Reflex

Flutter plugin for notification read & reply.

Flutter_Shortcuts

GitHub GitHub code size in bytes GitHub top language GitHub language count GitHub tag (latest by date) GitHub issues GitHub Repo stars GitHub forks

Compatibility

✅   Android
❌   iOS (active issue: iOS support for reflex)

Show some :heart: and :star: the repo

Why use Reflex?

Reflex Plugin is known for:

Reflex
Fast, performant & compatible
Free & Open-source
Production ready
Make App Reactive

Features

All the features listed below can be performed at the runtime.

✅   Get Notification Stream
✅   Read Notification
✅   Reply From Notification
✅   Auto Reply

Demo

Quick Start

Step 1: Include plugin to your project
dependencies:
  reflex: <latest version>

Run pub get and get packages.

Step 2: Add Service in AndroidManifest.xml

Add the following service inside the application tag of AndroidManifest.xml.

    ...
    <service
        android:label="notifications"
        android:name="com.devsonflutter.reflex.notification.NotificationListener"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>
</application>

Android 12+ Compatibility Add android:exported="true" field in the service tag to make it compatible with Android 12+.

    ...
    <service
        android:label="notifications"
        android:name="com.devsonflutter.reflex.notification.NotificationListener"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
        android:exported="true">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>
</application>
Step 3: Instantiate Reflex

Reflex must only be instantiated only once.

Reflex reflex = Reflex();

Example

Go to example section in pub.dev to see the full example code.

In GitHub, head over to example/lib/main.dart to see the full example code.

Import

This single import is enough for using reflex.

import 'package:reflex/reflex.dart';
Listen & Reply
StreamSubscription<ReflexEvent>? _subscription;
final List<ReflexEvent> _notificationLogs = [];
final List<ReflexEvent> _autoReplyLogs = [];
bool isListening = false;

Reflex reflex = Reflex(
  debug: true,
  packageNameList: ["com.whatsapp", "com.tyup"],
  packageNameExceptionList: ["com.android.systemui"],
  autoReply: AutoReply(
    packageNameList: ["com.whatsapp"],
    message: "[Reflex] This is an automated reply.",
  ),
);

@override
void initState() {
  super.initState();
  initPlatformState();
}

Future<void> initPlatformState() async {
  startListening();
}

void onData(ReflexEvent event) {
  setState(() {
    if (event.type == ReflexEventType.notification) {
      _notificationLogs.add(event);
    } else if (event.type == ReflexEventType.reply) {
      _autoReplyLogs.add(event);
    }
  });
  debugPrint(event.toString());
}

void startListening() {
  try {
    _subscription = reflex.notificationStream!.listen(onData);
    setState(() {
      isListening = true;
    });
  } on ReflexException catch (exception) {
    debugPrint(exception.toString());
  }
}

void stopListening() {
  _subscription?.cancel();
  setState(() => isListening = false);
}

Quick Guide

A quick guide to Flutter Reflex plugin!

Debugging

Debugging allows you to debug the plugin's functionality, logs are shown in the console.

By default debug logging is enabled. You can configure it using the debug field in the Reflex class.

Reflex reflex = Reflex(
  debug: false,
);
Listen notification permission

See if listening notification permission has been granted or not.

bool isPermissionGranted = await Reflex.isPermissionGranted;
Request notification listening permission

Use the function to grant notification listening permission.

await Reflex.requestPermission();
Notification Stream

Use the reflex object to get a notification stream to listen to notifications in your flutter application.

StreamSubscription<ReflexEvent>? _subscription;
_subscription = reflex.notificationStream!.listen((event) {
  // Application Logic
});

The stream is subscribed for ReflexEvent whenever a notification is received.

Reflex Event

The incoming reflex event contains:

  • type: ReflexEventType.notification whenever a notification is received to flutter application, and ReflexEventType.reply whenever an automated reply is sent.

  • packageName: Application's package name from which notifications are received and reply are sent.

  • title: Notification title

  • message: Message contained in the notification and while sending reply.

  • timestamp: Timestamp of the notification received and reply sent.

Listen notification from specific apps

Specify list of package names to listen to notifications from those applications.

If packageNameList: null plugin will listen to notifications from all packages.

Reflex reflex = Reflex(
  debug: true,
  packageNameList: ["com.whatsapp", "com.facebook"],
);
Avoid notification from specific apps

Specify package name exception list to avoid listening notifications from those applications.

If packageNameExceptionList: null, the plugin will listen to notifications for packageNameList if not null.

Reflex reflex = Reflex(
  debug: true,
  packageNameExceptionList: ["com.whatsapp"],
);
Auto Reply

Send an automated reply while listening notification.

AutoReply autoReply = AutoReply(
  message: "[Reflex] This is an automated reply.",
),
Auto reply specific apps

Specify packageNameList in AutoReply to reply to specific applications.

AutoReply autoReply = AutoReply(
  packageNameList: ["com.whatsapp"],
  message: "[Reflex] This is an automated reply.",
),

The AutoReply object is used by the Reflex's autoReply field to automatically reply to applications.

Reflex reflex = Reflex(
  debug: true,
  packageNameList: ["com.whatsapp", "com.tyup"],
  packageNameExceptionList: ["com.miui.securitycenter"],
  autoReply: AutoReply(
    packageNameList: ["com.whatsapp"],
    message: "[Reflex] This is an automated reply.",
  ),
);

If the autoReply field is null in Reflex class, Auto reply feature will be disabled.

Ambiguity

A ReflexException will be thrown if,

  • Reflex's packageNameList and packageNameExceptionList contains any similar package name.

  • any package name in AutoReply's packageNameList is contained in Reflex's packageNameExceptionList.

Project Created & Maintained By

Divyanshu Shekhar

GitHub followers

Subham Praharaj

GitHub followers

Contributions

Contributions are welcomed!

If you feel that a hook is missing, feel free to open a pull-request.

For a custom-hook to be merged, you will need to do the following:

  • Describe the use-case.

  • Open an issue explaining why we need this hook, how to use it, ... This is important as a hook will not get merged if the hook doens't appeal to a large number of people.

  • If your hook is rejected, don't worry! A rejection doesn't mean that it won't be merged later in the future if more people shows an interest in it. In the mean-time, feel free to publish your hook as a package on https://pub.dev.

  • A hook will not be merged unles fully tested, to avoid breaking it inadvertendly in the future.

Stargazers

Stargazers repo roster for @DevsOnFlutter/reflex

Forkers

Forkers repo roster for @DevsOnFlutter/reflex

Copyright & License

Code and documentation Copyright (c) 2021 Divyanshu Shekhar. Code released under the BSD 3-Clause License.

所属分类

源码仓库

使用此插件的项目

暂无相关数据。