Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b1d0979

Browse files
MBX-3625: add pending push data
2 parents 878dba9 + 0ed0d83 commit b1d0979

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed

mindbox_platform_interface/lib/src/types/mindbox_method_handler.dart

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class _PendingOperations {
2828
final Function? errorCallback;
2929
}
3030

31+
class _PendingPushData {
32+
_PendingPushData({required this.link, required this.payload});
33+
34+
final String link;
35+
final String payload;
36+
}
37+
3138
/// This class contains the necessary logic of the order of method calls
3239
/// for the correct SDK working.
3340
///
@@ -36,6 +43,7 @@ class MindboxMethodHandler {
3643
bool _initialized = false;
3744
final List<_PendingCallbackMethod> _pendingCallbackMethods = [];
3845
final List<_PendingOperations> _pendingOperations = [];
46+
final List<_PendingPushData> _pendingPushData = [];
3947
final String _logPrefix = '[Flutter] ';
4048
PushClickHandler? _pushClickHandler;
4149
InAppClickHandler? _inAppClickHandler;
@@ -151,6 +159,14 @@ class MindboxMethodHandler {
151159
required PushClickHandler handler,
152160
}) {
153161
_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+
}
154170
}
155171

156172
/// Method for handling In-app click.
@@ -299,10 +315,19 @@ class MindboxMethodHandler {
299315
channel.setMethodCallHandler((call) {
300316
switch (call.method) {
301317
case 'pushClicked':
318+
_logInfo('Handle method pushClicked');
319+
if (_pushClickHandler != null) {
302320
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]);
304324
}
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;
306331
case 'onInAppClick':
307332
if (call.arguments is List) {
308333
_inAppClickHandler?.call(
@@ -324,4 +349,16 @@ class MindboxMethodHandler {
324349
writeNativeLog(message: message, logLevel: LogLevel.info);
325350
}
326351

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+
327364
}

0 commit comments

Comments
 (0)