import 'dart:convert'; import 'package:dio/dio.dart'; import 'events/events.dart'; class AnalyticsSender { final Dio _dio; final String endpoint; AnalyticsSender({required this.endpoint, Dio? dio}) : _dio = dio ?? Dio(); Future send(List events) async { if (events.isEmpty) return; final body = {'events': events.map((e) => e.toJson()).toList()}; try { await _dio.post( endpoint, data: jsonEncode(body), options: Options( headers: {'Content-Type': 'application/json'}, sendTimeout: const Duration(seconds: 10), receiveTimeout: const Duration(seconds: 10), ), ); } on DioException catch (e) { throw AnalyticsSendException( 'Failed to send analytics events: ${e.message}', events: events, ); } } } class AnalyticsSendException implements Exception { final String message; final List events; AnalyticsSendException(this.message, {required this.events}); @override String toString() => 'AnalyticsSendException: $message'; }