track method

  1. @override
Future track(
  1. String name, [
  2. Map<String, dynamic>? params
])
override

Track an event. @param name The name of the event. @param params The optional parameters.

Implementation

@override
Future track(String name, [Map<String, dynamic>? params])
async
{
    if (name.isEmpty)
        return;

    // Check limits (https://support.google.com/firebase/answer/9237506?hl=en)

    if (name.length > GoogleAnalyticsService.MAX_EVENT_NAME_LENGTH)
        name = name.substring(0, GoogleAnalyticsService.MAX_EVENT_NAME_LENGTH);

    Map<String, dynamic>? safeParams;
    if (params != null)
    {
        safeParams = {};

        for (String key in params.keys)
        {
            Object? value = params[key];
            if (value == null)
                continue;

            if (key.length > GoogleAnalyticsService.MAX_PARAM_NAME_LENGTH)
                key = key.substring(0, GoogleAnalyticsService.MAX_PARAM_NAME_LENGTH);

            if (value is String)
            {
                String valueString = value;
                if (valueString.length > GoogleAnalyticsService.MAX_PARAM_VALUE_LENGTH)
                    valueString = valueString.substring(0, GoogleAnalyticsService.MAX_PARAM_VALUE_LENGTH);

                safeParams[key] = valueString;
            }
            else
                safeParams[key] = value;
        }
    }

    String s = (_isEnabled ? 'GoogleAnalytics' : 'Disabled-GoogleAnalytics') + ': ' + name;

    if (safeParams != null)
        for (String key in safeParams.keys)
            s += ' $key=${safeParams[key]}';

    logger.logInfo(s);

    if (_isEnabled)
        _firebaseAnalytics.logEvent(name: name, parameters: safeParams);
}