feat: add screen view observer firebase analytic

This commit is contained in:
Golek 2022-12-02 10:29:58 +07:00
parent 70dc4ccbef
commit 47c9386eb2
2 changed files with 44 additions and 1 deletions

View File

@ -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<GolekTruk> {
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<GolekTruk> {
],
backButtonDispatcher: RootBackButtonDispatcher(),
routeInformationParser: _appRouter.defaultRouteParser(),
routerDelegate: _appRouter.delegate(),
routerDelegate: AutoRouterDelegate(
_appRouter,
navigatorObservers: () => [
AutoRouteObserver(),
ScreenViewObserver(analyticsService: _analyticsService)
],
),
),
);
}

View File

@ -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<dynamic> 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);
}
}
}