sendEvent method

Future<bool> sendEvent({
  1. required BuildContext context,
  2. required String title,
  3. required String url,
  4. required String name,
  5. String referrer = '',
  6. Map<String, dynamic>? data,
  7. String type = 'event',
})

Sends an analytics event to Umami.

context is the current BuildContext. title is the event title. url is the event URL. name is the event name. referrer is the referrer URL (optional). data is additional event data (optional). type is the event type (default is 'event').

Returns true if the event was sent successfully.

Implementation

Future<bool> sendEvent({
  required BuildContext context,
  required String title,
  required String url,
  required String name,
  String referrer = '',
  Map<String, dynamic>? data,
  String type = 'event',
}) async {
  final userAgent = await getCustomUserAgent();
  debugPrint('User-Agent: $userAgent');

  // Get user's language
  // ignore: use_build_context_synchronously
  final language = Localizations.localeOf(context).toLanguageTag();

  // Get screen resolution in logical pixels
  // ignore: use_build_context_synchronously
  final mediaQuery = MediaQuery.of(context);
  final screen = "${mediaQuery.size.width.toInt()}x${mediaQuery.size.height.toInt()}";

  debugPrint('User-Agent: $userAgent');
  debugPrint("screen $screen");

  final payload = {
    "payload": {
      "hostname": hostname,
      "language": language,
      "referrer": referrer,
      "screen": screen,
      "title": title,
      "url": url,
      "website": website,
      "name": name,
      if (data != null) "data": data,
    },
    "type": type,
  };

  final response = await http.post(
    Uri.parse(endpoint + '/api/send'),
    headers: {
      'Content-Type': 'application/json',
      'User-Agent': userAgent,
    },
    body: jsonEncode(payload),
  );

  return response.statusCode == 200;
}