From 47c9386eb22fd7e950c8ae0cb18c619061bded73 Mon Sep 17 00:00:00 2001 From: Golek Date: Fri, 2 Dec 2022 10:29:58 +0700 Subject: [PATCH] feat: add screen view observer firebase analytic --- lib/golektruk.dart | 12 +++++++++++- lib/screen_view_observer.dart | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/lib/golektruk.dart b/lib/golektruk.dart index 9f0519a..57b5422 100644 --- a/lib/golektruk.dart +++ b/lib/golektruk.dart @@ -1,7 +1,10 @@ +import 'package:auto_route/auto_route.dart'; import 'package:component_library/component_library.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:golek_flutter_new/routes/app_router.gr.dart'; +import 'package:golek_flutter_new/screen_view_observer.dart'; +import 'package:monitoring/monitoring.dart'; import 'l10n/app_localizations.dart'; @@ -16,6 +19,7 @@ class _GolekTrukState extends State { final _lightTheme = LightGolekThemeData(); final _darkTheme = DarkGolekThemeData(); final _appRouter = AppRouter(); + final _analyticsService = AnalyticsService(); @override Widget build(BuildContext context) { @@ -40,7 +44,13 @@ class _GolekTrukState extends State { ], backButtonDispatcher: RootBackButtonDispatcher(), routeInformationParser: _appRouter.defaultRouteParser(), - routerDelegate: _appRouter.delegate(), + routerDelegate: AutoRouterDelegate( + _appRouter, + navigatorObservers: () => [ + AutoRouteObserver(), + ScreenViewObserver(analyticsService: _analyticsService) + ], + ), ), ); } diff --git a/lib/screen_view_observer.dart b/lib/screen_view_observer.dart index e69de29..16290cc 100644 --- a/lib/screen_view_observer.dart +++ b/lib/screen_view_observer.dart @@ -0,0 +1,33 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:monitoring/monitoring.dart'; + +class ScreenViewObserver extends AutoRouterObserver { + final AnalyticsService analyticsService; + + ScreenViewObserver({required this.analyticsService}); + + void _sendScreenView(PageRoute route) { + final String? screenName = route.settings.name; + + if (screenName != null) { + analyticsService.setCurrentScreen(screenName); + } + } + + @override + void didPush(Route route, Route? previousRoute) { + super.didPush(route, previousRoute); + if (route is PageRoute) { + _sendScreenView(route); + } + } + + @override + void didPop(Route route, Route? previousRoute) { + super.didPop(route, previousRoute); + if (previousRoute is PageRoute && route is PageRoute) { + _sendScreenView(previousRoute); + } + } +}