Flutter中如何使用flutter_local_notifications插件实现本地通知

在Flutter项目中集成flutter_local_notifications插件时遇到问题:按照官方文档初始化并设置了Android和iOS的配置,但通知始终无法触发。具体表现为:

  1. 调用show方法后没有任何反应,也没有报错信息
  2. 已确认AndroidManifest.xml中配置了权限,iOS的AppDelegate也添加了相关代码
  3. 测试设备为Android 12和iOS 15的真机
    请问是否有完整的示例代码或常见的排查步骤?特别想知道如何验证插件是否初始化成功。
2 回复

在Flutter中使用flutter_local_notifications插件实现本地通知:

  1. 添加依赖到pubspec.yaml
  2. 在Android和iOS中配置权限
  3. 初始化插件
  4. 请求通知权限
  5. 使用show方法显示通知

示例代码:

FlutterLocalNotificationsPlugin().show(
  0, '标题', '内容', NotificationDetails()
);

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


在Flutter中使用flutter_local_notifications插件实现本地通知的步骤如下:

1. 添加依赖

pubspec.yaml文件中添加依赖:

dependencies:
  flutter_local_notifications: ^16.3.0

运行flutter pub get安装插件。

2. 配置平台设置

Android配置

  • android/app/src/main/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  • android/app/build.gradle中设置minSdkVersion至少为16。

iOS配置

  • ios/Runner/Info.plist中添加:
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
  • 对于iOS 10+,需在didFinishLaunchingWithOptions中请求通知权限(通过插件自动处理)。

3. 初始化插件

main.dart中初始化:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化设置
  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher'); // 应用图标
  final DarwinInitializationSettings initializationSettingsDarwin =
      DarwinInitializationSettings(
    requestAlertPermission: true,
    requestBadgePermission: true,
    requestSoundPermission: true,
  );
  final InitializationSettings initializationSettings = InitializationSettings(
    android: initializationSettingsAndroid,
    iOS: initializationSettingsDarwin,
  );
  
  await flutterLocalNotificationsPlugin.initialize(
    initializationSettings,
    onDidReceiveNotificationResponse: (NotificationResponse response) {
      // 处理通知点击
      print('通知被点击: ${response.payload}');
    },
  );
  
  runApp(MyApp());
}

4. 请求权限(仅Android)

// Android 13+ 需要动态请求权限
await flutterLocalNotificationsPlugin
    .resolvePlatformSpecificImplementation<
        AndroidFlutterLocalNotificationsPlugin>()
    ?.requestPermission();

5. 显示通知

使用以下代码触发通知:

Future<void> showNotification() async {
  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
    'channel_id', // 频道ID
    '频道名称',      // 频道名称
    channelDescription: '频道描述',
    importance: Importance.max,
    priority: Priority.high,
  );
  const DarwinNotificationDetails iosPlatformChannelSpecifics =
      DarwinNotificationDetails();
  const NotificationDetails platformChannelSpecifics = NotificationDetails(
    android: androidPlatformChannelSpecifics,
    iOS: iosPlatformChannelSpecifics,
  );
  
  await flutterLocalNotificationsPlugin.show(
    0, // 通知ID
    '通知标题',
    '通知内容',
    platformChannelSpecifics,
    payload: '附加数据', // 可选,用于传递数据
  );
}

6. 调度通知(可选)

使用zonedSchedule实现定时通知:

await flutterLocalNotificationsPlugin.zonedSchedule(
  1,
  '定时通知',
  '这是预定的通知',
  tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)), // 5秒后触发
  platformChannelSpecifics,
  uiLocalNotificationDateInterpretation: 
      UILocalNotificationDateInterpretation.absoluteTime,
);

注意事项

  • 在真实设备上测试,模拟器可能不支持通知功能。
  • iOS需在物理设备上测试权限弹窗。
  • 处理通知点击时可通过payload传递数据。

通过以上步骤即可在Flutter应用中实现本地通知功能。

回到顶部