Skip to content

Commit e7fc68c

Browse files
committed
only register with the native listener once a dart listener has been added
1 parent ad12104 commit e7fc68c

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

android/src/main/java/com/onesignal/flutter/OneSignalNotifications.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ else if (call.method.contentEquals("OneSignal#lifecycleInit"))
6868
this.lifecycleInit();
6969
else if (call.method.contentEquals("OneSignal#proceedWithWillDisplay"))
7070
this.proceedWithWillDisplay(call, result);
71+
else if (call.method.contentEquals("OneSignal#addNativeClickListener"))
72+
this.registerClickListener();
7173
else
7274
replyNotImplemented(result);
7375
}
@@ -184,7 +186,10 @@ public void onNotificationPermissionChange(boolean permission) {
184186

185187
private void lifecycleInit() {
186188
OneSignal.getNotifications().addForegroundLifecycleListener(this);
187-
OneSignal.getNotifications().addClickListener(this);
188189
OneSignal.getNotifications().addPermissionObserver(this);
189190
}
191+
192+
private void registerClickListener() {
193+
OneSignal.getNotifications().addClickListener(this);
194+
}
190195
}

ios/Classes/OSFlutterNotifications.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
7373
[self lifecycleInit:call withResult:result];
7474
else if ([@"OneSignal#proceedWithWillDisplay" isEqualToString:call.method])
7575
[self proceedWithWillDisplay:call withResult:result];
76+
else if ([@"OneSignal#addNativeClickListener" isEqualToString:call.method])
77+
[self registerClickListener:call withResult:result];
7678
else
7779
result(FlutterMethodNotImplemented);
7880
}
@@ -103,11 +105,15 @@ - (void)registerForProvisionalAuthorization:(FlutterMethodCall *)call withResult
103105

104106
- (void)lifecycleInit:(FlutterMethodCall *)call withResult:(FlutterResult)result {
105107
[OneSignal.Notifications addForegroundLifecycleListener:self];
106-
[OneSignal.Notifications addClickListener:self];
107108
[OneSignal.Notifications addPermissionObserver:self];
108109
result(nil);
109110
}
110111

112+
- (void)registerClickListener:(FlutterMethodCall *)call withResult:(FlutterResult)result {
113+
[OneSignal.Notifications addClickListener:self];
114+
result(nil);
115+
}
116+
111117
- (void)onNotificationPermissionDidChange:(BOOL)permission {
112118
[self.channel invokeMethod:@"OneSignal#onNotificationPermissionDidChange" arguments:@{@"permission" : @(permission)}];
113119
}

lib/src/notifications.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class OneSignalNotifications {
3131

3232
bool _permission = false;
3333

34+
bool _clickHandlerRegistered = false;
35+
3436
/// Whether this app has push notification permission.
3537
bool get permission {
3638
return _permission;
@@ -177,6 +179,10 @@ class OneSignalNotifications {
177179
/// The notification click listener is called whenever the user opens a
178180
/// OneSignal push notification, or taps an action button on a notification.
179181
void addClickListener(OnNotificationClickListener listener) {
182+
if (!_clickHandlerRegistered) {
183+
_clickHandlerRegistered = true;
184+
_channel.invokeMethod("OneSignal#addNativeClickListener");
185+
}
180186
_clickListeners.add(listener);
181187
}
182188

0 commit comments

Comments
 (0)