@@ -28,6 +28,13 @@ class _PendingOperations {
28
28
final Function ? errorCallback;
29
29
}
30
30
31
+ class _PendingPushData {
32
+ _PendingPushData ({required this .link, required this .payload});
33
+
34
+ final String link;
35
+ final String payload;
36
+ }
37
+
31
38
/// This class contains the necessary logic of the order of method calls
32
39
/// for the correct SDK working.
33
40
///
@@ -36,6 +43,7 @@ class MindboxMethodHandler {
36
43
bool _initialized = false ;
37
44
final List <_PendingCallbackMethod > _pendingCallbackMethods = [];
38
45
final List <_PendingOperations > _pendingOperations = [];
46
+ final List <_PendingPushData > _pendingPushData = [];
39
47
final String _logPrefix = '[Flutter] ' ;
40
48
PushClickHandler ? _pushClickHandler;
41
49
InAppClickHandler ? _inAppClickHandler;
@@ -151,6 +159,14 @@ class MindboxMethodHandler {
151
159
required PushClickHandler handler,
152
160
}) {
153
161
_pushClickHandler = handler;
162
+ if (_pendingPushData.isNotEmpty) {
163
+ _logInfo ('pendingPushData is not empty. Send data to methodHandler' );
164
+ for (final pushData in _pendingPushData) {
165
+ _logInfo ('invoke pushClicked method from pending list' );
166
+ _sendPendingPushData (pushData.link, pushData.payload);
167
+ }
168
+ _pendingPushData.clear ();
169
+ }
154
170
}
155
171
156
172
/// Method for handling In-app click.
@@ -299,10 +315,19 @@ class MindboxMethodHandler {
299
315
channel.setMethodCallHandler ((call) {
300
316
switch (call.method) {
301
317
case 'pushClicked' :
318
+ _logInfo ('Handle method pushClicked' );
319
+ if (_pushClickHandler != null ) {
302
320
if (call.arguments is List ) {
303
- _pushClickHandler? .call (call.arguments[0 ], call.arguments[1 ]);
321
+ _logInfo ('Return data from push with parameters link = '
322
+ '${call .arguments [0 ]} and payload = ${call .arguments [1 ]}' );
323
+ _sendPendingPushData (call.arguments[0 ], call.arguments[1 ]);
304
324
}
305
- break ;
325
+ } else {
326
+ _logInfo ('pushClickHandler not set. Save push data' );
327
+ _pendingPushData.add (_PendingPushData (
328
+ link: call.arguments[0 ], payload: call.arguments[1 ]));
329
+ }
330
+ break ;
306
331
case 'onInAppClick' :
307
332
if (call.arguments is List ) {
308
333
_inAppClickHandler? .call (
@@ -324,4 +349,16 @@ class MindboxMethodHandler {
324
349
writeNativeLog (message: message, logLevel: LogLevel .info);
325
350
}
326
351
352
+ void _logError (String message) {
353
+ writeNativeLog (message: message, logLevel: LogLevel .error);
354
+ }
355
+
356
+ void _sendPendingPushData (String link, String payload) {
357
+ try {
358
+ _pushClickHandler? .call (link, payload);
359
+ } catch (e) {
360
+ _logError ('error when send pending push data: $e ' );
361
+ }
362
+ }
363
+
327
364
}
0 commit comments