Skip to content

Instantly share code, notes, and snippets.

@arafaysaleem
Created December 23, 2024 07:45
Show Gist options
  • Save arafaysaleem/6b8c5169398f63f9e8fd4f1b9311665a to your computer and use it in GitHub Desktop.
Save arafaysaleem/6b8c5169398f63f9e8fd4f1b9311665a to your computer and use it in GitHub Desktop.
Backend Analytics Service for Flutter
import 'dart:async';
// Networking
import '../networking/networking.dart';
// Monitoring
import 'analytics_client_base.dart';
class ServerAnalyticsClient implements AnalyticsClientBase {
final ApiService _apiService;
const ServerAnalyticsClient(this._apiService);
@override
Future<void> toggleAnalyticsCollection(bool enabled) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': enabled
? 'analytics_collection_enabled'
: 'analytics_collection_disabled',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> identifyUser({
required String userId,
required String email,
required String role,
}) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'user_session_identified',
'userId': userId,
'email': email,
'role': role,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> resetUser() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'user_session_reset',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackEvent(String eventName, [Map<String, Object>? eventData]) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': eventName,
'data': eventData,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackScreenView(String routeName, String action) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'screen_view',
'route_name': routeName,
'action': action,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackBottomSheetView(String routeName, [Map<String, Object>? data]) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'bottom_sheet_view',
'route_name': routeName,
'data': data,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackDialogView(String dialogName, [Map<String, Object>? data]) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'dialog_view',
'dialog_name': dialogName,
'data': data,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackAppForegrounded() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'app_foregrounded',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackAppBackgrounded() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'app_backgrounded',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackButtonPressed(String buttonName, [Map<String, Object>? data]) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'button_pressed',
'button_name': buttonName,
'data': data,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackPermissionRequest(String permission, String status) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'permission_requested',
'permission': permission,
'status': status,
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackNewAppOnboarding() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'new_app-onboarding',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackAppCreated() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'app_created',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackAppUpdated() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'app_updated',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackAppDeleted() async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'app_deleted',
},
converter: (res) => res.headers.isSuccess,
);
}
@override
Future<void> trackTaskCompleted(int completedCount) async {
return _apiService.setData(
endpoint: '/analytics',
data: {
'event': 'task_completed',
'completed_count': completedCount,
},
converter: (res) => res.headers.isSuccess,
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment