Flutter中如何使用flutter_local_notifications插件实现本地通知
在Flutter项目中集成flutter_local_notifications插件时遇到问题:按照官方文档初始化并设置了Android和iOS的配置,但通知始终无法触发。具体表现为:
- 调用
show方法后没有任何反应,也没有报错信息 - 已确认AndroidManifest.xml中配置了权限,iOS的AppDelegate也添加了相关代码
- 测试设备为Android 12和iOS 15的真机
请问是否有完整的示例代码或常见的排查步骤?特别想知道如何验证插件是否初始化成功。
2 回复
在Flutter中使用flutter_local_notifications插件实现本地通知:
- 添加依赖到
pubspec.yaml - 在Android和iOS中配置权限
- 初始化插件
- 请求通知权限
- 使用
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应用中实现本地通知功能。

