返回顶部
首页 > 资讯 > 移动开发 >Flutter:flutter_local_notifications——消息推送的学习
  • 470
分享到

Flutter:flutter_local_notifications——消息推送的学习

flutterflutter消息通知 2023-08-31 20:08:14 470人浏览 安东尼
摘要

前言 注: 刚开始学习,如果某些案例使用时遇到问题,可以自行百度、查看官方案例、官方GitHub。 简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示

前言

注: 刚开始学习,如果某些案例使用时遇到问题,可以自行百度、查看官方案例、官方GitHub

简介
Flutter Local Notifications是一个用于在Flutter应用程序中显示本地通知的插件。它提供了一个简单而强大的方法来在设备上发送通知,以便用户可以在应用程序处于后台或设备定状态下接收到它们。

使用Flutter Local Notifications插件,可以创建和安排各种类型的通知,包括:

  1. 即时通知:立即显示的通知,用于向用户传达重要消息或提醒。
  2. 周期性通知:可以按照指定的时间间隔重复显示的通知,例如每天或每周的提醒。
  3. 定时通知:在特定日期和时间触发的通知,用于安排未来事件或提醒。

通过使用Flutter Local Notifications,可以自定义通知的外观和行为,包括标题,内容,图标,声音,振动模式和点击操作。此外,还可以处理用户与通知的交互,例如当用户点击通知时执行特定的操作。

Flutter Local Notifications插件使用简单且易于集成到Flutter项目中。它提供了一组易于使用的api,可以轻松创建和管理通知。此外,它还兼容AndroidiOS平台,并且可以在两个平台上以相同的代码库进行操作。

官方地址
https://pub-web.flutter-io.cn/packages/flutter_local_notifications

备注: 这里只学习关于安卓的基本使用

学习

准备

安装

flutter pub add flutter_local_notifications

即时通知

通知辅助类
NotificationHelper

// 导入包import 'package:flutter_local_notifications/flutter_local_notifications.dart';class NotificationHelper {  // 使用单例模式进行初始化  static final NotificationHelper _instance = NotificationHelper._internal();  factory NotificationHelper() => _instance;  NotificationHelper._internal();  // FlutterLocalNotificationsPlugin是一个用于处理本地通知的插件,它提供了在Flutter应用程序中发送和接收本地通知的功能。  final FlutterLocalNotificationsPlugin _notificationsPlugin =      FlutterLocalNotificationsPlugin();  // 初始化函数  Future<void> initialize() async {    // AndroidInitializationSettings是一个用于设置Android上的本地通知初始化的类    // 使用了app_icon作为参数,这意味着在Android上,应用程序的图标将被用作本地通知的图标。    const AndroidInitializationSettings initializationSettingsAndroid =    AndroidInitializationSettings('@mipmap/ic_launcher');    // 15.1是DarwinInitializationSettings,旧版本好像是IOSInitializationSettings(有些例子中就是这个)    const DarwinInitializationSettings initializationSettingsIOS =        DarwinInitializationSettings();    // 初始化    const InitializationSettings initializationSettings =        InitializationSettings(            android: initializationSettingsAndroid,            iOS: initializationSettingsIOS);    await _notificationsPlugin.initialize(initializationSettings);  }//  显示通知  Future<void> showNotification(      {required String title, required String body}) async {    // 安卓的通知    // 'your channel id':用于指定通知通道的ID。    // 'your channel name':用于指定通知通道的名称。    // 'your channel description':用于指定通知通道的描述。    // Importance.max:用于指定通知的重要性,设置为最高级别。    // Priority.high:用于指定通知的优先级,设置为高优先级。    // 'ticker':用于指定通知的提示文本,即通知出现在通知中心的文本内容。    const AndroidNotificationDetails androidNotificationDetails =        AndroidNotificationDetails('your.channel.id', 'your channel name',            channelDescription: 'your channel description',            importance: Importance.max,            priority: Priority.high,            ticker: 'ticker');    // ios的通知    const String darwinNotificationCateGoryPlain = 'plainCategory';    const DarwinNotificationDetails iosNotificationDetails =        DarwinNotificationDetails(      categoryIdentifier: darwinNotificationCategoryPlain, // 通知分类    );    // 创建跨平台通知    const NotificationDetails platfORMChannelSpecifics =        NotificationDetails(android: androidNotificationDetails,iOS: iosNotificationDetails);    // 发起一个通知    await _notificationsPlugin.show(      1,      title,      body,      platformChannelSpecifics,    );  }}

使用

main() async {  //用于确保Flutter的Widgets绑定已经初始化。  WidgetsFlutterBinding.ensureInitialized();  // 初始化通知帮助类  NotificationHelper notificationHelper = NotificationHelper();  await notificationHelper.initialize();  runApp(const MyApp());}
class SwitcherContainerState extends State<SwitcherContainer> {  final NotificationHelper _notificationHelper = NotificationHelper();    Widget build(BuildContext context) {    return Center(        child: ElevatedButton(            onPressed: () {              _notificationHelper.showNotification(                title: 'Hello',                body: 'This is a notification!',              );            },            child: const Text("发起通知")));  }}

注意:

  • 一定要在main函数里进行初始化,不然会报下面这个错误(百度了半天,最后发现是自己忘记了初始化)
    在这里插入图片描述
  • 要开启应用的通知权限,不然可能无法通知

在这里插入图片描述

周期性通知

 // 周期性通知  Future<void> scheduleNotification({    required int id,    required String title,    required String body,  }) async {    const AndroidNotificationDetails androidNotificationDetails =        AndroidNotificationDetails('your.channel.id', 'your channel name',            channelDescription: 'your channel description',            importance: Importance.max,            priority: Priority.high,            ticker: 'ticker');    // ios的通知    const String darwinNotificationCategoryPlain = 'plainCategory';    const DarwinNotificationDetails iosNotificationDetails =        DarwinNotificationDetails(      categoryIdentifier: darwinNotificationCategoryPlain, // 通知分类    );    // 创建跨平台通知    const NotificationDetails platformChannelSpecifics = NotificationDetails(        android: androidNotificationDetails, iOS: iosNotificationDetails);// 发起通知    await _notificationsPlugin.periodicallyShow(        id, title, body, RepeatInterval.everyMinute, platformChannelSpecifics);  }}

这里我设置的是每分钟通知一次,注意:假如你在10:01发起了通知,10:01不会有通知消息,而是从10:02开发每隔一分钟发起一次通知。

定时通知

// 定时通知Future<void> zonedScheduleNotification(    {required int id,    required String title,    required String body,    required DateTime scheduledDateTime}) async {  const AndroidNotificationDetails androidNotificationDetails =      AndroidNotificationDetails('your.channel.id', 'your channel name',          channelDescription: 'your channel description',          importance: Importance.max,          priority: Priority.high,          ticker: 'ticker');  // ios的通知  const String darwinNotificationCategoryPlain = 'plainCategory';  const DarwinNotificationDetails iosNotificationDetails =      DarwinNotificationDetails(    categoryIdentifier: darwinNotificationCategoryPlain, // 通知分类  );  // 创建跨平台通知  const NotificationDetails platformChannelSpecifics = NotificationDetails(      android: androidNotificationDetails, iOS: iosNotificationDetails);  // 发起通知  await _notificationsPlugin.zonedSchedule(    id, title, body,    tz.TZDateTime.from(scheduledDateTime, tz.local), // 使用本地时区的时间    platformChannelSpecifics,    uiLocalNotificationDateInterpretation:        UILocalNotificationDateInterpretation.absoluteTime, // 设置通知的触发时间是觉得时间  );}

注意:如下图参数scheduledDateTZDateTime类型,看了一下官方示例,还需要下载timezone 库。
timezone 是一个用来处理时区信息的,可以使得在不同平台上创建和处理日期时间对象更加方便和准确。

官方地址
https://pub-web.flutter-io.cn/packages/timezone

安装

flutter pub add timezone

初始化
就在通知辅助类NotificationHelperinitialize函数里初始化一下就行

import 'package:timezone/timezone.dart' as tz;import 'package:timezone/data/latest.dart' as tz;//  初始化tztz.initializeTimeZones();

在这里插入图片描述
在这里插入图片描述

其他

除了上面三种外还有其他的通知形式,比如(以下内容没有测试

长文本

final androidPlatformChannelSpecifics = AndroidNotificationDetails(  'channel_id',  'channel_name',  'channel_description',  styleInformation: BigTextStyleInformation('大文本内容'),);

大图片

final androidPlatformChannelSpecifics = AndroidNotificationDetails(  'channel_id',  'channel_name',  'channel_description',  styleInformation: BigPictureStyleInformation(    FilePathAndroidBitmap('图片路径'),    largeIcon: FilePathAndroidBitmap('大图标路径'),  ),);

还有一些比如媒体样式、带进度条的等都可以在AndroidNotificationDetails找到相应的参数。
对于IOS来说,通知样式收到苹果的限制,可以通过DarwinNotificationDetailsattachments参数来实现一些简单操作。

来源地址:https://blog.csdn.net/weixin_41897680/article/details/131947231

--结束END--

本文标题: Flutter:flutter_local_notifications——消息推送的学习

本文链接: https://www.lsjlt.com/news/386829.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flutter:flutter_local_notifications——消息推送的学习
    前言 注: 刚开始学习,如果某些案例使用时遇到问题,可以自行百度、查看官方案例、官方github。 简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示...
    99+
    2023-08-31
    flutter flutter消息通知
  • FCM( Firebase) 发送推送消息PHP
    Firebase 的管理后台也有发送测试消息推送的入口,在左侧栏目的 Cloud Messaging 准备工作: 1、准备好 服务器秘钥, 如图 打开postman , 创建一个新的api 请求 1...
    99+
    2023-09-02
    php json 开发语言
  • redis怎么做的消息推送
    redis做消息推送的示例:客户端A订阅通道:redis 127.0.0.1:6379> SUBSCRIBE channeltest客户端B往该通道发送消息:redis 127.0.0.1:63...
    99+
    2024-04-02
  • 企业微信消息推送(推送给个人)
    官方开发文档:文档 - 企业微信开发者中心 获取access_token 请求方式 GET请求地址 https://qyapi.weixin.qq.com/cgi-bin/gettoken请求参数是否必填说明corpid是企业ID,参考:...
    99+
    2023-09-07
    php 微信
  • WebSocket简介与消息推送
    目录一、Socket简介TCP/IP协议UDP协议二、WebSocket简介与消息推送三、WebSocket客户端四、WebSocket服务器端五、测试运行六、小结与消息推送框架6....
    99+
    2024-04-02
  • 消息推送实现|使用WebSocket主动推送消息到客户端方案
    一. 前言 在开发中,我们经常会遇到这样一类需求:需要在网页上显示天气预报,股票数据或者实时排行榜单等实时变化的数据。对于此类需求,一种较为原始的做法就是让客户端每隔一段时间主动去轮询服务器。但这种做法有一个很大的弊端:如果客户端的数量很大...
    99+
    2023-09-18
    websocket 服务器 网络协议
  • Android顶栏定时推送消息
    在用安卓设备时,经常会应用到弹出推送消息。下面在此把我之前写的推送代码分享给大家,供大家参考,有不同见解的朋友欢迎提出,共同学习进步! 最近搜索看这个的朋友比较多。这个也只是单...
    99+
    2022-06-06
    Android
  • Springboot Websocket Stomp 消息订阅推送
    目录需求背景websocket协议stomp协议需求背景 闲话不扯,直奔主题。需要和web前端建立长链接,互相实时通讯,因此想到了websocket,后面随着需求的变更,需要用户订...
    99+
    2024-04-02
  • 友盟消息推送api、python sdk
    一,友盟消息推送python服务端sdk地址和文档地址   1.sdk地址:http://dev.umeng.com/system/resources/W1siZiIsIjIwMTYvMDgvMTkvMTdfNDFfMzhfNzg2X3B...
    99+
    2023-01-30
    消息 api sdk
  • python3实现钉钉消息推送
    背景 偶然发现一个python实现的按照农历/阴历推送消息提醒的程序,钉钉群消息推送。此处总结并对其可推送的消息做。 DingtalkNotice 环境:python3.7 安装:pip install schedule #实现定时任务的...
    99+
    2023-01-31
    消息
  • HTML5 WebSocket怎么实现消息推送
    这篇“HTML5 WebSocket怎么实现消息推送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2024-04-02
  • android消息推送机制是什么
    Android消息推送机制是一种通过网络将消息推送给已经安装了应用程序的Android设备的技术。它主要依靠Google提供的Fir...
    99+
    2023-09-28
    android
  • 如何用PHP实现消息推送
     什么是消息推送 通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。  为什么要使用消息推送技术 通常情况下都是用户发送请求浏览器显示用户需要的信息。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴...
    99+
    2023-08-31
    php 开发语言 websocket
  • react-native消息推送实现方式
    目录react-native极光推送一、安装插件二、配置安卓配置IOS配置三、使用解决ios角标无法清除总结react-native极光推送 先去官网注册:https://www.j...
    99+
    2023-02-18
    react-native消息推送 react-native 消息推送
  • SpringBoot+WebSocket实现消息推送功能
    目录背景WebSocket简介协议原理WebSocket与HTTP协议的区别WebSocket特点应用场景系统集成Websocketjar包引入Websocket配置具体实现测试示例...
    99+
    2022-11-13
    SpringBoot WebSocket消息推送 SpringBoot 消息推送 SpringBoot WebSocket
  • FineReport如何手动推送APP消息
    今天给大家介绍一下FineReport如何手动推送APP消息。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。在报表填报成功后,发送消息至APP会提示数据已更新。...
    99+
    2023-06-04
  • 企业微信消息推送(一)接收消息服务器URL
    1.点击左上角头像,打开微信管理平台 2.创建应用 3.获取五个参数 3.1获取应用的AgentId、Secret 3.2获取企业ID 配置接收消息服务器URL 企业微信限制过多,公司域名所有...
    99+
    2023-09-30
    服务器 企业微信 java
  • Android几种消息推送方案总结
    首先看一张国内Top500 Android应用中它们用到的第三方推送以及所占数量: 现在总结下Android平台下几种推送方案的基本情况以及优缺点: 一、使用GCM(Goog...
    99+
    2022-06-06
    Android
  • php之app消息推送案例教程
    如何用php实现APP消息推送 现在有很多的消息推送厂商,比如阿里云的消息推送,极光推送,融云的消息推送。他们的原理都是把sdk内置在app里面,达到消息推送的目的,通过一张图来了解...
    99+
    2024-04-02
  • thinkphp如何实现友盟消息推送
    这篇文章主要为大家展示了“thinkphp如何实现友盟消息推送”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“thinkphp如何实现友盟消息推送”这篇文章吧。上...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作