send method

Future<bool> send({
  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 event to Umami /api/send.

context is the current BuildContext. title is the page or event title. url is the page or 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> send({
  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();

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

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

  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;
}