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

相关推荐
lqj_本人1 小时前
Flutter 三方库 Pedometer 的鸿蒙化适配指南
flutter·华为·harmonyos
weixin_440730502 小时前
测试笔记(日志审计、幂等性)
笔记
神明不懂浪漫2 小时前
【第一章】MySQL简介
数据库·经验分享·笔记·mysql·oracle
山岚的运维笔记2 小时前
mysql 专业笔记 -- 第 14 章:GROUP BY
运维·数据库·笔记·后端·学习·mysql·dba
阳光宅男@李光熠2 小时前
【电子通识】PCB外观检查机AVI(Automated Visual Inspection)
笔记·学习
旖旎夜光2 小时前
【LangChain实战】LangChain 学习笔记(一):从定义大模型到工具调用
人工智能·笔记·python·学习·langchain
深圳雨林凯AI11 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
冬木家居12 小时前
40㎡客厅变形记,小家住出大自由[特殊字符]
android·经验分享·笔记·智能家居·微信公众平台
摇滚侠12 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记