Files
social-app/apps/lib/core/analytics/sender.dart
T
2026-04-01 18:35:32 +08:00

46 lines
1.1 KiB
Dart

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<void> send(List<BaseAnalyticsEvent> 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<BaseAnalyticsEvent> events;
AnalyticsSendException(this.message, {required this.events});
@override
String toString() => 'AnalyticsSendException: $message';
}