MethodChannelFlutterselligent constructor
MethodChannelFlutterselligent()
Implementation
MethodChannelFlutterselligent() {
log.onRecord.listen((record) {
debugPrint('[FlutterSelligent] ${record.message}');
});
if (Platform.environment.containsKey('FLUTTER_TEST')) { return; }
methodChannel.setMethodCallHandler((call) async {
var eventType = call.arguments['broadcastEventType'];
var data = getData(call.arguments['data']);
if (call.method == 'broadcastEvent') {
if (eventType == BroadcastEventType.buttonClick.value) {
handleEvents(BroadcastEvent(
BroadcastEventType.buttonClick,
ButtonData(
data['id'] as String,
data['label'] as String,
NotificationButtonType.getByValue(data['type'] as int),
data['value'] as String,
data['data']
)
));
}
else if (eventType == BroadcastEventType.universalLink.value) {
handleEvents(BroadcastEvent(
BroadcastEventType.universalLink,
UniversalLinkData(data['url'] as String)
));
}
else if (eventType == BroadcastEventType.receivedNotification.value) {
handleEvents(BroadcastEvent(
BroadcastEventType.receivedNotification,
NotificationData(
data['pushId'] as String,
data['name'] as String
)
));
}
else if (eventType == BroadcastEventType.receivedIAM.value) {
var newMessages = data['messages'].map((m) {
var message = m as Map<Object?, Object?>;
return InAppMessageEventData(message['id'] as String, message['title'] as String);
}).toList();
handleEvents(BroadcastEvent(
BroadcastEventType.receivedIAM,
InAppMessageEventListData(
newMessages,
)
));
}
else if (eventType == BroadcastEventType.receiveDeviceId.value) {
handleEvents(BroadcastEvent(
BroadcastEventType.receiveDeviceId,
DeviceIdData(data['deviceId'] as String)
));
}
else if (eventType == BroadcastEventType.receivedGcmToken.value) {
handleEvents(BroadcastEvent(
BroadcastEventType.receivedGcmToken,
GcmTokenData(data['token'] as String)
));
}
else if (eventType == BroadcastEventType.displayingIAM.value) {
var appContext = appNavigatorKey?.currentState?.overlay?.context;
var messages = await getInAppMessages();
var messageId = data['id'] as String;
var message = messages.where((m) => m.id == messageId).firstOrNull;
if (message != null && appContext != null && appContext.mounted && message.type == InAppMessageType.alert) {
List<TextButton> buttons = [];
setInAppMessageAsSeen(messageId);
for (var button in message.buttons) {
buttons.add(
TextButton(
style: TextButton.styleFrom(textStyle: Theme.of(appContext).textTheme.labelLarge),
child: Text(button.label),
onPressed: () {
executeButtonAction(button.id, message.id);
Navigator.of(appContext).pop();
}
));
}
showDialog(context: appContext, builder: (x) => AlertDialog(
title: Text(message.title),
content: Text(message.body),
actions: buttons
));
}
else {
displayNotification(messageId);
}
handleEvents(BroadcastEvent(
BroadcastEventType.displayingIAM,
InAppMessageEventData(
messageId,
data['title'] as String
)
));
}
else if (eventType == BroadcastEventType.displayNotification.value) {
handleEvents(BroadcastEvent(BroadcastEventType.displayNotification, null));
}
else if (eventType == BroadcastEventType.dismissNotification.value) {
handleEvents(BroadcastEvent(BroadcastEventType.dismissNotification, null));
}
else if (call.arguments['name'] == BroadcastEventType.customEvent.value) {
handleEvents(BroadcastEvent(BroadcastEventType.customEvent, eventType));
}
}
else {
log.warning('Method not implemented: ${call.method}');
}
});
}