CapturePerceptCommRequest function

Future<void> CapturePerceptCommRequest(
  1. PerceptCommunicationState commState,
  2. Map<String, dynamic> message,
  3. String piToken
)

Implementation

Future<void> CapturePerceptCommRequest(
  PerceptCommunicationState commState,
  Map<String, dynamic> message,
  String piToken,
) async {
  Debug.print("Communication Request Initiate: $commState $message");
  try {
    Map<String, dynamic> remoteMessageJson =
        RemoteMessage.fromMap(message).toMap();

    final stringProperties = <String, String>{};
    final listProperties = <String, List<String>>{};
    Map<String, dynamic> propertiesToSend = {};

    if (remoteMessageJson['pi_pn_metaData'] != null) {
      final decodedMetaData = jsonDecode(remoteMessageJson['pi_pn_metaData'])
          as Map<String, dynamic>;
      if (decodedMetaData.isNotEmpty) {
        propertiesToSend.addAll(decodedMetaData);
      }
    }

    final packageInfo = await PackageInfo.fromPlatform();

    propertiesToSend.addAll({
      PerceptOS.name.asString: Platform.operatingSystem,
      PerceptOS.version.asString: Platform.operatingSystemVersion,
      PerceptSDK.clientTs.asString:
          DateTime.now().millisecondsSinceEpoch.toString(),
      PerceptSDK.clientUniqueEventId.asString: "EI-${getUuidV4()}",
      PerceptSDK.type.asString: 'Flutter',
      PerceptSDK.version.asString:
          PerceptFlutterPlatform.instance.getPluginVersion(),
      ...packageInfo.asMap
    });

    propertiesToSend.forEach((key, value) {
      if (!keysToRemove.contains(key)) {
        if (value is List<dynamic>) {
          listProperties[key] = value.map((e) => e.toString()).toList();
        } else {
          stringProperties[key] = value.toString();
        }
      }
    });

    final request = CommunicationRequest(
      commState.asString,
      stringProperties,
      listProperties,
    );
    await sendCommunicationCaptureRequest([request], piToken);
  } catch (e, s) {
    Debug.print("Communication Request Error: $e $s");
  }
}