添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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

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

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

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

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

官方地址
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(
      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;
//  初始化tz
tz.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参数来实现一些简单操作。

:面向跨平台插件的代码,用于在Flutter应用程序中显示本地通知 :通用平台接口的代码 这些可以在相同名称的相应目录中找到。 大多数开发人员都在这里,因为他们希望使用flutter_local_notifications插件。 每个目录中都有一个自述文件,其中包含更多信息。 如果遇到错误,请在GitHub存储库上提出它们。 请不要通过电子邮件将它们发送给我,因为GitHub是适合他们使用的地方,并且允许社区成员回答问题,尤其是如果我错过了电子邮件。 如果它们可以限于实际的错误或功能请求,也将不胜感激。 如果您正在寻找如何使用插件来执行特定类型的通知,请检查示例应用程序是否提供了每种受支持功能的详细代码示例。 如果您错过了某些内容(例如,特定于平台的设置),也请尝试先检查自述文件。 可以在找到有关提交拉取请求的准则
Flutter Local Notifications插件该存储库包含以下软件包flutter_local_notifications:跨平台faci的代码Flutter Local Notifications插件包含以下软件包flutter_local_notifications:用于跨平台插件的代码,用于在Flutter应用程序中显示本地通知flutter_local_notifications_platform_interface :通用平台接口的代码,可以在相同名称的相应目录中找到。 大多数开发人员都在这里,因为他们希望使用flutter_local_notifications插件。
Flutter Local Notifications Plugin A cross platform plugin for displaying local notifications. Supported Platforms Android API 16 (4.1 , the minimum version supported by Flutter). Uses the NotificationCompat APIs so it can be run older Android devices. iOS 8.0 (the minimum version supported by Flutter). Supports the old and new iOS notification APIs (the User Notifications Framework introduced in iOS 10 but will use the UILocalNotification APIs for devices predating iOS 10) Features Mocka
很多情况下我们需要给用户弹通知栏,这个功能在Android中是非常简单的,在FLutter中,也有非常成熟的插件flutter_local_notifications供我们使用,这篇文章主要介绍flutter_local_notifications插件初使用是需要进行的几点配置,希望能帮到大家! 步骤1:在pubspec.yaml文件中添加flutter_local_notifications依...
通知栏的消息推送可简单分为本地消息推送和网络消息推送。 这里主要介绍的是本地消息推送。 使用的package是官方发布的flutter_local_notifications,版本是3.0.3,官方地址如下: https://pub.flutter-io.cn/packages/flutter_local_notifications 下面介绍其简单的使用方法: 1、首先获取package: 在pubspec.yaml中添加 dependencies:
Android 中使用 Notification 是比较简单的,这里不多做赘述,但若在 flutter 中要使用Notification 我们可以通过 Flutter Local Notifications Plugin 这个插件来实现。 在 pubspec.yaml 里面添加依赖。 dependencies: flutter_local_notifications: ^0.4.4+2...
在 dart 中导入 import 'package:flutter_local_notifications/flutter_local_notifications.dart'; 首先需要创建通知插件 final FlutterLocalNotificationsPlugin np = FlutterLocalNotificationsPlu
引领本地通知新纪元:Flutter Local Notifications 插件 项目地址:https://gitcode.com/MaikuB/flutter_local_notifications 在这个瞬息万变的移动应用世界中,有效吸引用户注意力是至关重要的。为此,我们向您推荐一个非常实用的开源项目——Flutter Local Notifications,它是一个强大的本地通知插件,让您的...
### 回答1: flutter_local_notifications是一个Flutter插件,用于在移动设备上显示本地通知。它可以帮助开发者在应用程序中实现各种通知功能,例如提醒用户进行某项操作、通知用户有新消息或提醒用户完成某项任务等。该插件支持Android和iOS平台,并提供了丰富的API和配置选项,使开发者可以轻松地创建和管理本地通知。 ### 回答2: flutter_local_notifications 是一个 Flutter 插件,用于在本地进行通知的创建、显示和调度。此插件可让开发人员在应用程序内部创建和安排本地通知,通常用于为应用程序用户提供有关后台事件的提示。 此插件允许开发人员创建三种类型的通知:基本通知、计划通知和重复通知。基本通知是简单的通知消息,可包括标题、正文和指向应用程序的图标。计划通知是在特定的日期和时间向用户发出的通知,例如生日提醒、节日提醒、会议提醒等。重复通知是在特定间隔时间后重复出现的通知,例如每天定时提醒用户进行运动或吃药。 此插件使用 Android 和 iOS 平台的本地通知功能来实现本地通知。它提供了许多选项,例如可自定义通知的图标、声音和振动模式;可自定义通知的优先级和颜色,并具有特定到最小粒度(秒)的计划通知;还可以让开发人员在应用程序未运行时携带数据传递通知。 最后,flutter_local_notifications 插件是一个非常有用的 Flutter 插件,允许开发人员创建和安排本地通知,看起来与设备上的其余通知一样。此插件使用简单、功能强大,可帮助开发人员为应用程序用户提供更好的用户体验。 ### 回答3: Flutter是一种非常流行的移动应用程序开发框架。Flutter_local_notifications是Flutter中的一个插件,它提供了本地通知的功能,可以在用户离开应用的情况下向用户发送通知Flutter_local_notifications可以在Android和iOS上使用,并且它提供了更在深度的配置和灵活性,以满足用户的需求。它可以在应用程序的后台执行,并且它可以在用户设备的通知栏,锁屏上提醒用户。 Flutter_local_notifications使用简单易懂,只需要几行代码就可以实现。它可以用于多种类型的应用程序,如电商应用中的订单提醒,健康应用程序中的饮食计划,社交应用程序中的新消息提醒等等。 除了提供基本的通知配置,Flutter_local_notifications还可以自定义通知的图标,声音和振动等,从而让每个通知都更加个性化。此外,Flutter_local_notifications还提供了许多其他的功能,如定时通知,本地存储通知,红点提醒等等。 总之,Flutter_local_notifications是一种非常有用的Flutter插件,它可以为许多不同类型的应用程序提供强大的功能和定制化能力。如果你正在开发一个需要本地通知功能的应用程序,那么Flutter_local_notifications是一个非常不错的选择。