我想执行定期本地通知。我正在使用flutter_local_notification 和flutter Workmanager。问题是 callbackDispatcher 函数中的 executeTask 函数无法执行显示通知的代码,尽管它执行了例如调试消息。它没有给我任何错误或异常,并且工作人员的结果是成功的。我想知道问题可能是什么。显示本地通知的代码已经过测试,并且运行良好。这是我对颤振 Workmanager 的包装:
void callbackDispatcher() {
Workmanager.executeTask((taskName, inputData) async {
try {
print ("WorkManagerFactory::callbackDispatcher::executeTask()");
await notification.showNotification(inputData['title'], inputData['body']);
}
catch (e) {
print("There is indeed a problem with executing the notification code");
}
return Future.value(true);
}
);
}
void init() async {
print("WorkManagerFactory::init()");
WidgetsFlutterBinding.ensureInitialized();
await Workmanager.initialize(callbackDispatcher, isInDebugMode: true);
}
void registerMorningTask() async {
await Workmanager.registerPeriodicTask(
'1',
'periodicMorningMessage',
frequency: Duration(minutes: 15),
inputData: {'title': 'title for now', 'body': 'body for now'},
);
}
这是我的通知代码:
void init() async {
print("Notification()::init()");
WidgetsFlutterBinding.ensureInitialized();
const AndroidInitializationSettings androidInitializationSettings = AndroidInitializationSettings('app_icon');
InitializationSettings initializationSettings = InitializationSettings(android: androidInitializationSettings);
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: (String payload) async {
if(payload != null)
debugPrint('notification payload: ' + payload);
}
);
}
Future<void> showNotification(String inTitle, String inMessage) async {
print('Notification::showNotification()');
const AndroidNotificationDetails androidPlatformChannelSpecifics =
AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel description',
importance: Importance.max,
priority: Priority.high,
showWhen: true,
styleInformation: BigTextStyleInformation(''),
ongoing: false,
playSound: true,
enableVibration: true
);
const NotificationDetails platformChannelSpecifics =
NotificationDetails(android: androidPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0,
inTitle,
inMessage,
platformChannelSpecifics,
payload: 'item x');
return;
}