feat: integrate Umami analytics for screen tracking via GoRouter observers
This commit is contained in:
25
lib/core/analytics/umami_analytics.dart
Normal file
25
lib/core/analytics/umami_analytics.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
import 'package:flutter_estatisticas/umami_service.dart';
|
||||
import 'package:flutter_estatisticas/umami_navigation_observer.dart';
|
||||
|
||||
/// Umami analytics singleton. Configured once at app startup.
|
||||
///
|
||||
/// Reuses the same `website` ID as the web app (re-quest.com) so all traffic
|
||||
/// (web + mobile) aggregates under one dashboard. `hostname` differentiates
|
||||
/// mobile vs. web inside Umami.
|
||||
class UmamiAnalytics {
|
||||
UmamiAnalytics._();
|
||||
|
||||
static const _endpoint = 'https://analytics.superlabs.co';
|
||||
static const _websiteId = '00e1ce31-e174-4519-8b59-63e8d4556b01';
|
||||
static const _hostname = 're-quest-mobile.app';
|
||||
|
||||
static final UmamiService service = UmamiService(
|
||||
endpoint: _endpoint,
|
||||
website: _websiteId,
|
||||
hostname: _hostname,
|
||||
);
|
||||
|
||||
/// Navigator observer that auto-tracks screen transitions in GoRouter.
|
||||
static final UmamiNavigationObserver navigationObserver =
|
||||
UmamiNavigationObserver(service);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:real_estate_mobile/core/analytics/umami_analytics.dart';
|
||||
import 'package:real_estate_mobile/core/constants/app_colors.dart';
|
||||
import 'package:real_estate_mobile/core/widgets/app_shell.dart';
|
||||
import 'package:real_estate_mobile/features/auth/presentation/providers/auth_provider.dart';
|
||||
@@ -44,6 +45,7 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
return GoRouter(
|
||||
initialLocation: '/splash',
|
||||
refreshListenable: authRefreshNotifier,
|
||||
observers: [UmamiAnalytics.navigationObserver],
|
||||
redirect: (context, state) {
|
||||
final authState = ref.read(authProvider);
|
||||
final isAuthenticated = authState.status == AuthStatus.authenticated;
|
||||
|
||||
Reference in New Issue
Block a user