feat: integrate Firebase Analytics and configure navigation observer in app router
This commit is contained in:
13
lib/core/analytics/firebase_analytics_config.dart
Normal file
13
lib/core/analytics/firebase_analytics_config.dart
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||||
|
|
||||||
|
/// Firebase Analytics feeds the linked GA4 property (`G-DHR81R6Z63` on web,
|
||||||
|
/// native app streams for iOS/Android). One instance is reused across the app
|
||||||
|
/// for events, and one observer tracks GoRouter screen transitions.
|
||||||
|
class FirebaseAnalyticsConfig {
|
||||||
|
FirebaseAnalyticsConfig._();
|
||||||
|
|
||||||
|
static final FirebaseAnalytics instance = FirebaseAnalytics.instance;
|
||||||
|
|
||||||
|
static final FirebaseAnalyticsObserver navigationObserver =
|
||||||
|
FirebaseAnalyticsObserver(analytics: instance);
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:real_estate_mobile/core/analytics/firebase_analytics_config.dart';
|
||||||
import 'package:real_estate_mobile/core/analytics/umami_analytics.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/constants/app_colors.dart';
|
||||||
import 'package:real_estate_mobile/core/widgets/app_shell.dart';
|
import 'package:real_estate_mobile/core/widgets/app_shell.dart';
|
||||||
@@ -45,7 +46,10 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
return GoRouter(
|
return GoRouter(
|
||||||
initialLocation: '/splash',
|
initialLocation: '/splash',
|
||||||
refreshListenable: authRefreshNotifier,
|
refreshListenable: authRefreshNotifier,
|
||||||
observers: [UmamiAnalytics.navigationObserver],
|
observers: [
|
||||||
|
UmamiAnalytics.navigationObserver,
|
||||||
|
FirebaseAnalyticsConfig.navigationObserver,
|
||||||
|
],
|
||||||
redirect: (context, state) {
|
redirect: (context, state) {
|
||||||
final authState = ref.read(authProvider);
|
final authState = ref.read(authProvider);
|
||||||
final isAuthenticated = authState.status == AuthStatus.authenticated;
|
final isAuthenticated = authState.status == AuthStatus.authenticated;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import device_info_plus
|
|||||||
import emoji_picker_flutter
|
import emoji_picker_flutter
|
||||||
import facebook_auth_desktop
|
import facebook_auth_desktop
|
||||||
import file_selector_macos
|
import file_selector_macos
|
||||||
|
import firebase_analytics
|
||||||
import firebase_core
|
import firebase_core
|
||||||
import firebase_messaging
|
import firebase_messaging
|
||||||
import flutter_local_notifications
|
import flutter_local_notifications
|
||||||
@@ -29,6 +30,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
|
||||||
FacebookAuthDesktopPlugin.register(with: registry.registrar(forPlugin: "FacebookAuthDesktopPlugin"))
|
FacebookAuthDesktopPlugin.register(with: registry.registrar(forPlugin: "FacebookAuthDesktopPlugin"))
|
||||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
|
FirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FirebaseAnalyticsPlugin"))
|
||||||
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
||||||
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
|
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
|
||||||
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
||||||
|
|||||||
24
pubspec.lock
24
pubspec.lock
@@ -393,6 +393,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.9.3+5"
|
version: "0.9.3+5"
|
||||||
|
firebase_analytics:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: firebase_analytics
|
||||||
|
sha256: "4f85b161772e1d54a66893ef131c0a44bd9e552efa78b33d5f4f60d2caa5c8a3"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "11.6.0"
|
||||||
|
firebase_analytics_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: firebase_analytics_platform_interface
|
||||||
|
sha256: a44b6d1155ed5cae7641e3de7163111cfd9f6f6c954ca916dc6a3bdfa86bf845
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.4.3"
|
||||||
|
firebase_analytics_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: firebase_analytics_web
|
||||||
|
sha256: c7d1ed1f86ae64215757518af5576ff88341c8ce5741988c05cc3b2e07b0b273
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.5.10+16"
|
||||||
firebase_core:
|
firebase_core:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -71,6 +71,9 @@ dependencies:
|
|||||||
# Microsoft Clarity (session recording / heatmaps)
|
# Microsoft Clarity (session recording / heatmaps)
|
||||||
clarity_flutter: ^1.8.0
|
clarity_flutter: ^1.8.0
|
||||||
|
|
||||||
|
# Google Analytics (via Firebase Analytics — feeds the linked GA4 property)
|
||||||
|
firebase_analytics: ^11.3.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|||||||
Reference in New Issue
Block a user