Flutter中如何使用flutterlocalnotificationsplugin插件
在Flutter项目中集成flutterlocalnotificationsplugin插件时遇到问题,具体步骤如下:
- 已按照pub.dev文档添加依赖并同步
- 在AndroidManifest.xml中配置了权限
- 初始化插件时调用initialize方法
但测试时始终无法触发本地通知,日志也没有报错信息。请问:
- 是否需要额外配置通知渠道?
- Android 8.0以上和以下版本的处理方式有差异吗?
- 能否提供完整的初始化代码示例?
(环境:Flutter 3.13.0,插件版本9.8.0)
2 回复
在Flutter中使用flutter_local_notifications插件,步骤如下:
-
添加依赖:在pubspec.yaml中添加
flutter_local_notifications: ^版本号,运行flutter pub get -
Android配置:
- 在
android/app/src/main/AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>- 创建通知渠道(Android 8.0+必需)
- 在
-
iOS配置:
- 在
ios/Runner/Info.plist添加权限描述
- 在
-
初始化插件:
final FlutterLocalNotificationsPlugin notificationsPlugin =
FlutterLocalNotificationsPlugin();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
const AndroidInitializationSettings androidSettings =
AndroidInitializationSettings('@mipmap/ic_launcher');
const DarwinInitializationSettings iosSettings =
DarwinInitializationSettings();
final InitializationSettings settings =
InitializationSettings(android: androidSettings, iOS: iosSettings);
await notificationsPlugin.initialize(settings);
}
- 显示通知:
await notificationsPlugin.show(
0,
'通知标题',
'通知内容',
NotificationDetails(
android: AndroidNotificationDetails(
'channel_id',
'channel_name',
importance: Importance.max,
),
iOS: DarwinNotificationDetails(),
),
);
记得处理权限请求,特别是在Android 13+和iOS 10+系统上。
更多关于Flutter中如何使用flutterlocalnotificationsplugin插件的实战系列教程也可以访问 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.POST_NOTIFICATIONS"/>
- 创建通知图标(可选),在
android/app/src/main/res/drawable放置图标文件。
iOS
- 在
ios/Runner/Info.plist中添加权限描述:
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIUserNotificationSettings</key>
<array></array>
3. 初始化插件
在 main.dart 中初始化:
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化设置
const AndroidInitializationSettings androidSettings =
AndroidInitializationSettings('@mipmap/ic_launcher'); // 默认图标
const DarwinInitializationSettings iosSettings =
DarwinInitializationSettings();
const InitializationSettings initSettings = InitializationSettings(
android: androidSettings,
iOS: iosSettings,
);
await flutterLocalNotificationsPlugin.initialize(
initSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) {
// 处理通知点击
print('通知被点击: ${response.payload}');
},
);
runApp(MyApp());
}
4. 请求通知权限(Android 13+ 和 iOS)
// 在需要的地方调用
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.requestPermission(); // Android 13+
// iOS 权限请求在初始化时自动触发,可通过配置控制
5. 显示通知
Future<void> showNotification() async {
const AndroidNotificationDetails androidDetails = AndroidNotificationDetails(
'channel_id', // 通道ID
'频道名称', // 通道名称
channelDescription: '频道描述',
importance: Importance.max,
priority: Priority.high,
);
const DarwinNotificationDetails iosDetails = DarwinNotificationDetails();
const NotificationDetails details = NotificationDetails(
android: androidDetails,
iOS: iosDetails,
);
await flutterLocalNotificationsPlugin.show(
0, // 通知ID
'通知标题',
'通知内容',
details,
payload: '附加数据', // 点击通知时传递的数据
);
}
6. 定时通知(可选)
// 每天固定时间触发
await flutterLocalNotificationsPlugin.zonedSchedule(
1,
'定时通知',
'这是预定时间的通知',
tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)), // 5秒后
const NotificationDetails(/* 配置同上 */),
uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime,
matchDateTimeComponents: DateTimeComponents.time, // 每天同一时间
);
7. 取消通知
// 取消特定ID的通知
await flutterLocalNotificationsPlugin.cancel(0);
// 取消所有通知
await flutterLocalNotificationsPlugin.cancelAll();
注意事项:
- Android:从 Android 8.0 开始必须创建通知通道。
- iOS:需在真实设备上测试,模拟器可能无法正常显示。
- 处理点击事件通过
initialize中的onDidReceiveNotificationResponse回调。
通过以上步骤即可在Flutter应用中实现本地通知功能。

