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


