flutter如何实现本地通知

在Flutter中如何实现本地通知功能?需要支持定时提醒和点击跳转特定页面,求推荐可靠的插件和具体实现步骤。目前尝试了flutter_local_notifications,但定时触发时遇到不稳定的情况,有没有更好的解决方案或优化建议?

2 回复

Flutter 实现本地通知可使用 flutter_local_notifications 插件。步骤如下:

  1. 添加依赖到 pubspec.yaml
  2. 配置 Android 和 iOS 权限。
  3. 初始化插件并请求权限。
  4. 使用 show 方法触发通知。

更多关于flutter如何实现本地通知的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现本地通知,可以使用 flutter_local_notifications 插件。以下是基本实现步骤:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter_local_notifications: ^16.3.0

2. 配置各平台

Android 配置

  • android/app/src/main/AndroidManifest.xml 中添加权限:
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
  • 创建通知图标(可选)

iOS 配置

  • ios/Runner/Info.plist 中添加权限描述:
<key>NSUserNotificationsUsageDescription</key>
<string>需要通知权限</string>

3. 初始化通知

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin notificationsPlugin =
    FlutterLocalNotificationsPlugin();

void initializeNotifications() async {
  const AndroidInitializationSettings androidSettings =
      AndroidInitializationSettings('@mipmap/ic_launcher');
  
  const DarwinInitializationSettings iosSettings =
      DarwinInitializationSettings(
        requestAlertPermission: true,
        requestBadgePermission: true,
        requestSoundPermission: true,
      );

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

  await notificationsPlugin.initialize(settings);
}

4. 显示通知

Future<void> showNotification() async {
  const AndroidNotificationDetails androidDetails = AndroidNotificationDetails(
    'channel_id',
    'Channel Name',
    channelDescription: 'Channel Description',
    importance: Importance.max,
    priority: Priority.high,
  );

  const DarwinNotificationDetails iosDetails = DarwinNotificationDetails();

  const NotificationDetails details = NotificationDetails(
    android: androidDetails,
    iOS: iosDetails,
  );

  await notificationsPlugin.show(
    0, // 通知ID
    '通知标题',
    '通知内容',
    details,
  );
}

5. 安排定时通知

Future<void> scheduleNotification() async {
  await notificationsPlugin.zonedSchedule(
    0,
    '定时通知',
    '这是预定的通知',
    tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)),
    const NotificationDetails(/* 配置同上 */),
    uiLocalNotificationDateInterpretation: 
        UILocalNotificationDateInterpretation.absoluteTime,
  );
}

6. 处理通知点击

在初始化时设置点击回调:

await notificationsPlugin.initialize(
  settings,
  onDidReceiveNotificationResponse: (NotificationResponse response) {
    // 处理通知点击
    print('通知被点击: ${response.payload}');
  },
);

主要功能

  • 即时通知
  • 定时通知(需添加 timezone 插件)
  • 自定义图标和声音
  • 通知分组和管理

记得在 main() 中调用 initializeNotifications() 进行初始化,并在需要时调用 showNotification() 显示通知。

回到顶部