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

相关推荐
好的佩奇2 小时前
蓝牙之经典蓝牙
android·flutter·蓝牙
Peter-OK2 小时前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
成都蜀味缘餐饮技术培训学校4 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
传奇开心果编程4 小时前
【Flutter踩坑排雷】第19课:路由硬编码坑|字符串路由书写错误,页面跳转失败排查
android·flutter·ios·移动开发·跨平台·ui框架·声明式ui
希和20275 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
蒸蒸yyyyzwd6 小时前
秋招学习笔记 day109
笔记·八股
只愿云淡风清9 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
希和202719 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
一个人旅程~1 天前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫1 天前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习