From c24dcba8407725354c79948554c41a40a1975665 Mon Sep 17 00:00:00 2001 From: Michael Bui <25263378+MaikuB@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:23:41 +1100 Subject: [PATCH 1/2] fix crash occurring for notification actions that don't have a callback to handle them --- flutter_local_notifications/CHANGELOG.md | 4 ++++ .../ActionBroadcastReceiver.java | 7 ++++++- .../ios/Classes/FlutterEngineManager.m | 13 +++++++------ flutter_local_notifications/pubspec.yaml | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/flutter_local_notifications/CHANGELOG.md b/flutter_local_notifications/CHANGELOG.md index dca84cbb1..23fd7a4f4 100644 --- a/flutter_local_notifications/CHANGELOG.md +++ b/flutter_local_notifications/CHANGELOG.md @@ -1,3 +1,7 @@ +# [12.0.1] + +* [Android][iOS] fixed issue [1721](https://github.com/MaikuB/flutter_local_notifications/issues/1721) where a crash occurs upon tapping on a notification action fbut the `onDidReceiveBackgroundNotificationResponse` optional callback hasn't been specified. + # [12.0.0] * Bumped `dbus` dependency via `flutter_local_notifications_linux` diff --git a/flutter_local_notifications/android/src/main/java/com/dexterous/flutterlocalnotifications/ActionBroadcastReceiver.java b/flutter_local_notifications/android/src/main/java/com/dexterous/flutterlocalnotifications/ActionBroadcastReceiver.java index d191e677a..971432634 100644 --- a/flutter_local_notifications/android/src/main/java/com/dexterous/flutterlocalnotifications/ActionBroadcastReceiver.java +++ b/flutter_local_notifications/android/src/main/java/com/dexterous/flutterlocalnotifications/ActionBroadcastReceiver.java @@ -71,6 +71,12 @@ private void startEngine(Context context) { return; } + FlutterCallbackInformation dispatcherHandle = preferences.lookupDispatcherHandle(); + if (dispatcherHandle == null) { + Log.w(TAG, "Callback information could not be retrieved"); + return; + } + FlutterInjector injector = FlutterInjector.instance(); FlutterLoader loader = injector.flutterLoader(); @@ -80,7 +86,6 @@ private void startEngine(Context context) { engine = new FlutterEngine(context); DartExecutor dartExecutor = engine.getDartExecutor(); - FlutterCallbackInformation dispatcherHandle = preferences.lookupDispatcherHandle(); initializeEventChannel(dartExecutor); String dartBundlePath = loader.findAppBundlePath(); diff --git a/flutter_local_notifications/ios/Classes/FlutterEngineManager.m b/flutter_local_notifications/ios/Classes/FlutterEngineManager.m index b3865bef2..3d0e085b4 100644 --- a/flutter_local_notifications/ios/Classes/FlutterEngineManager.m +++ b/flutter_local_notifications/ios/Classes/FlutterEngineManager.m @@ -45,22 +45,23 @@ - (void)startEngineIfNeeded:(ActionEventSink *)actionEventSink NSNumber *dispatcherHandle = [_persistentState objectForKey:@"dispatcher_handle"]; - backgroundEngine = - [[FlutterEngine alloc] initWithName:@"FlutterLocalNotificationsIsolate" - project:nil - allowHeadlessExecution:true]; FlutterCallbackInformation *info = [FlutterCallbackCache lookupCallbackInformation:[dispatcherHandle longValue]]; if (!info) { - NSLog(@"callback information could not be retrieved"); - abort(); + NSLog(@"Callback information could not be retrieved"); + return; } NSString *entryPoint = info.callbackName; NSString *uri = info.callbackLibraryPath; + backgroundEngine = + [[FlutterEngine alloc] initWithName:@"FlutterLocalNotificationsIsolate" + project:nil + allowHeadlessExecution:true]; + dispatch_async(dispatch_get_main_queue(), ^{ FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName: diff --git a/flutter_local_notifications/pubspec.yaml b/flutter_local_notifications/pubspec.yaml index 51091cefa..ae2015b22 100644 --- a/flutter_local_notifications/pubspec.yaml +++ b/flutter_local_notifications/pubspec.yaml @@ -2,7 +2,7 @@ name: flutter_local_notifications description: A cross platform plugin for displaying and scheduling local notifications for Flutter applications with the ability to customise for each platform. -version: 12.0.0 +version: 12.0.1 homepage: https://github.com/MaikuB/flutter_local_notifications/tree/master/flutter_local_notifications issue_tracker: https://github.com/MaikuB/flutter_local_notifications/issues From 81232a1d111ecddd4dc9adf4f52970dac113351c Mon Sep 17 00:00:00 2001 From: runner Date: Sat, 8 Oct 2022 01:24:34 +0000 Subject: [PATCH 2/2] Clang Format --- .../ios/Classes/FlutterEngineManager.m | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/flutter_local_notifications/ios/Classes/FlutterEngineManager.m b/flutter_local_notifications/ios/Classes/FlutterEngineManager.m index 3d0e085b4..0c917bc28 100644 --- a/flutter_local_notifications/ios/Classes/FlutterEngineManager.m +++ b/flutter_local_notifications/ios/Classes/FlutterEngineManager.m @@ -45,7 +45,6 @@ - (void)startEngineIfNeeded:(ActionEventSink *)actionEventSink NSNumber *dispatcherHandle = [_persistentState objectForKey:@"dispatcher_handle"]; - FlutterCallbackInformation *info = [FlutterCallbackCache lookupCallbackInformation:[dispatcherHandle longValue]]; @@ -58,10 +57,10 @@ - (void)startEngineIfNeeded:(ActionEventSink *)actionEventSink NSString *uri = info.callbackLibraryPath; backgroundEngine = - [[FlutterEngine alloc] initWithName:@"FlutterLocalNotificationsIsolate" - project:nil - allowHeadlessExecution:true]; - + [[FlutterEngine alloc] initWithName:@"FlutterLocalNotificationsIsolate" + project:nil + allowHeadlessExecution:true]; + dispatch_async(dispatch_get_main_queue(), ^{ FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName: