You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter local_notifications 10.0.0版本本地通知失效求助

问题解决步骤

核心原因

你仅声明了FlutterLocalNotificationsPlugin变量但未实例化并完成平台初始化配置,导致调用periodicallyShow时对象为null。同时flutter_local_notifications 10.0.0版本对通知初始化流程有明确要求,必须完成安卓、iOS的平台配置后才能调用通知方法。

完整修复代码

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

// 直接实例化插件对象,避免空引用
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();

// 初始化通知服务,建议在App启动时调用(比如main函数或页面initState)
Future<void> initNotifications() async {
  // Android初始化配置:指定通知图标(替换成你项目中的图标资源)
  const AndroidInitializationSettings androidInitSettings =
      AndroidInitializationSettings('@mipmap/ic_launcher');

  // iOS初始化配置:申请通知权限
  const DarwinInitializationSettings iosInitSettings =
      DarwinInitializationSettings(
    requestAlertPermission: true,
    requestBadgePermission: true,
    requestSoundPermission: true,
  );

  // 合并平台初始化配置
  const InitializationSettings initSettings = InitializationSettings(
    android: androidInitSettings,
    iOS: iosInitSettings,
  );

  // 完成插件初始化
  await flutterLocalNotificationsPlugin.initialize(initSettings);
}

// 显示周期通知的方法
Future<void> showNotification() async {
  // Android渠道配置:10.0.0版本必须明确渠道,否则通知无法正常显示
  const AndroidNotificationDetails androidDetails =
      AndroidNotificationDetails(
    'daily_deals_channel', // 唯一渠道ID
    '每日优惠提醒', // 渠道名称
    channelDescription: '推送每日优惠活动的通知渠道', // 渠道描述
    importance: Importance.max,
    priority: Priority.high,
  );

  // iOS通知配置
  const DarwinNotificationDetails iosDetails = DarwinNotificationDetails();

  // 合并平台通知配置
  const NotificationDetails notificationDetails = NotificationDetails(
    android: androidDetails,
    iOS: iosDetails,
  );

  // 调用周期通知方法
  await flutterLocalNotificationsPlugin.periodicallyShow(
    0, // 通知ID
    'Hello user,',
    "Don't miss out on the exciting deals for the day.",
    RepeatInterval.everyMinute,
    notificationDetails,
    androidAllowWhileIdle: true, // 允许设备休眠时触发通知
  );
}

额外注意事项

  • 调用showNotification前必须先执行initNotifications,示例如下:
    @override
    void initState() {
      super.initState();
      initNotifications().then((_) {
        showNotification();
      });
    }
    
  • Android端需在android/app/src/main/res/mipmap或drawable目录放置通知图标,否则会显示系统默认图标。
  • iOS端需在Info.plist中添加权限描述:
    <key>NSAlertUsageDescription</key>
    <string>需要发送通知提醒您每日优惠活动</string>
    <key>NSBadgeUsageDescription</key>
    <string>需要更新应用角标提醒您有新通知</string>
    <key>NSSoundUsageDescription</key>
    <string>需要播放通知声音提醒您</string>
    

内容的提问来源于stack exchange,提问作者YourDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:01:01