2.6 KiB
2.6 KiB
6. 日历提醒未使用自定义提示音
文件: apps/lib/core/notification/services/reminder_scheduler_service.dart
问题描述:
已添加 apps/assets/reminder_sound/1.WAV 自定义提示音文件,但代码中未使用,仍使用系统默认铃声:
// 当前代码
const androidDetails = AndroidNotificationDetails(
_channelId,
_channelName,
// ...
playSound: true, // 使用系统默认
// 没有 customSound 配置
);
根因: 添加了资源文件但未在通知配置中引用。
建议修复:
- 在
pubspec.yaml添加 assets 路径:
flutter:
assets:
- assets/reminder_sound/
- 在通知配置中引用自定义铃声:
// Android
final androidDetails = AndroidNotificationDetails(
_channelId,
_channelName,
playSound: true,
sound: RawResourceAndroidNotificationSound('reminder_sound/1'),
// ...
);
// iOS
const iosDetails = DarwinNotificationDetails(
presentSound: true,
sound: 'reminder_sound_1.wav',
// ...
);
7. 通知调度缺少变化检测(重复重建)
文件: apps/lib/core/notification/services/reminder_scheduler_service.dart
问题描述:
每次获取日历事件都会调用 upsertEventReminders,内部执行 cancelEventReminders + 重建,即使事件没变化:
Future<void> upsertEventReminders(event) async {
await cancelEventReminders(event.eventId); // 总是先取消
for (alarm in buildAlarmsForEvent(event)) {
await _scheduleAlarm(alarm); // 总是重建
}
}
影响:
- 通知 ID 变化导致系统重新调度,浪费资源
- 用户频繁访问日历时产生不必要的操作
建议修复:
Future<void> upsertEventReminders(event) async {
final existing = await _getScheduledAlarm(event.eventId);
if (existing != null && _isSameAlarm(existing, event)) {
return; // 跳过,没变化
}
await cancelEventReminders(event.eventId);
for (alarm in buildAlarmsForEvent(event)) {
await _scheduleAlarm(alarm);
}
}
相关文件
apps/lib/app/app.dartapps/lib/data/cache/cache_scope.dartapps/lib/data/cache/cache_store.dartapps/lib/data/cache/cached_repository.dartapps/lib/core/inbox/inbox_sync_store.dartapps/lib/features/chat/presentation/bloc/chat_bloc.dartapps/lib/app/services/app_prewarm_orchestrator.dartapps/lib/core/notification/services/reminder_scheduler_service.dartapps/lib/core/notification/services/reminder_permission_service.dartapps/lib/core/notification/services/reminder_reconcile_service.dartapps/assets/reminder_sound/