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目录

相关推荐
xxwl58513 小时前
第六章---计算几何
笔记·学习·算法
ss27313 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 12 PostgreSQL数据目录与重要文件结构
数据库·笔记·postgresql
Song_RsHt13 小时前
Gateway (上):路由与转发,微服务的统一入口
java·笔记·后端·学习·gateway
骑士雄师14 小时前
《结构化思维》第五章 · 精读回顾(案例版 · 含结构图)
笔记
xxwl58514 小时前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
David猪大卫15 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
lisw0515 小时前
计算生物学学习笔记:NHGRI基因组数据科学分析、可视化和信息学实验室空间(AnVIL)
笔记·计算生物学
骑士雄师17 小时前
结构化思维》第一、二章 → prompt review skill 优化启发清单
笔记
David猪大卫17 小时前
【C++修炼】STL容器—模板进阶:非类型模板参数、模板特化、模板分离编译
c语言·开发语言·c++·经验分享·笔记·学习·面试
qq_2842740517 小时前
液压泵工作原理与性能参数笔记:能量转换与吸压油三必要条件、压力分级、排量流量与三种效率特性曲线、径向轴向柱塞泵变量原理及配流配油盘(含考点)
笔记·学习·自动化·制造