Flutter笔记--本地通知

Flutter开发中,本地通知一般会用到flutter_local_notifications,它是Flutter官方推荐的本地通知插件,Dart pub生态最主流的本地推送库。不需要后端服务器、不需要网络,通知全部在手机设备本地完成调度、弹出。简单总结如下:

API:

initialize(xxx):初始化通知插件,配置 Android/iOS 基础参数。

InitializationSettings:分别包装 Android、iOS 初始化配置

AndroidInitializationSettings(String icon):Android 通知图标,传入drawable资源名

DarwinInitializationSettings:iOS 配置,权限、通知展示选项

resolvePlatformSpecificImplementation<T>():获取Android平台独有的API实现。iOS返回null。

作用:

1.在手机状态栏弹出系统通知(弹窗、状态栏图标、铃声、震动)

2.定时本地提醒:指定未来某个时间弹出通知(闹钟、待办提醒)

3.监听通知点击事件,携带自定义参数 payload,跳转页面

4.支持 Android、iOS双平台;封装了两个平台原生通知API,不用写Android/iOS 原生代码。

栗子:

Dart 复制代码
  flutter_local_notifications: ^17.0.0
Dart 复制代码
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await NotificationHelper.init();
  runApp(const MyApp());
}

class NotificationHelper {
  static final FlutterLocalNotificationsPlugin _plugin =
  FlutterLocalNotificationsPlugin();

  static Future<void> init() async {
    const AndroidInitializationSettings androidSettings =
    AndroidInitializationSettings('ic_notification'); // drawable下图标名称

    const DarwinInitializationSettings iosSettings = DarwinInitializationSettings();

    const InitializationSettings initSettings = InitializationSettings(
      android: androidSettings,
      iOS: iosSettings,
    );

    await _plugin.initialize(initSettings);
    await _plugin.resolvePlatformSpecificImplementation<
        AndroidFlutterLocalNotificationsPlugin>()
        ?.requestNotificationsPermission();
  }


  static Future<void> showSimpleNotification() async {
    const AndroidNotificationDetails androidDetail =
    AndroidNotificationDetails(
      "default_channel_id", 
      "普通通知",
      channelDescription: "普通本地通知通道",
      importance: Importance.high,
      priority: Priority.high,
    );

    const NotificationDetails notificationDetail = NotificationDetails(
      android: androidDetail,
      iOS: DarwinNotificationDetails(),
    );

    await _plugin.show(
      1001,
      "本地通知标题",
      "这是一条即时弹出的本地通知消息",
      notificationDetail,
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text("Demo1 立即通知")),
        body: Center(
          child: ElevatedButton(
            onPressed: NotificationHelper.showSimpleNotification,
            child: const Text("点击弹出本地通知"),
          ),
        ),
      ),
    );
  }
}

注意:

1 zonedSchedule+androidAllowWhileIdle:true 需要精确闹钟权限,Android12+用户必须手动开启,否则抛exact_alarms_not_permitted。

2 zonedSchedule必须TZDateTime,普通DateTime不能直接传入,需要timezone并且初始化。

3 Android通知图标必须是drawable目录

相关推荐
一隅论数智5 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
深圳老胡5 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her15 天前
并查集-听课笔记
笔记·算法·并查集
彧azz5 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师5 天前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ5 天前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen875 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅5 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
陈年老古董6 天前
MediaPipe 姿态检测与脸部关键点检测
笔记·python·opencv·学习·dlib
彧azz6 天前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构