File tree Expand file tree Collapse file tree 3 files changed +51
-2
lines changed
Expand file tree Collapse file tree 3 files changed +51
-2
lines changed Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
55import 'package:force_update_helper/force_update_helper.dart' ;
66import 'package:starter_architecture_flutter_firebase/src/routing/app_router.dart' ;
77import 'package:starter_architecture_flutter_firebase/src/routing/app_startup.dart' ;
8+ import 'package:starter_architecture_flutter_firebase/src/routing/go_router_delegate_listener.dart' ;
89import 'package:starter_architecture_flutter_firebase/src/utils/alert_dialogs.dart' ;
910import 'package:url_launcher/url_launcher.dart' ;
1011
@@ -56,7 +57,7 @@ class MyApp extends ConsumerWidget {
5657 onException: (e, st) {
5758 log (e.toString ());
5859 },
59- child: child! ,
60+ child: GoRouterDelegateListener ( child: child ! ) ,
6061 ),
6162 );
6263 },
Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ GoRouter goRouter(Ref ref) {
4646 return GoRouter (
4747 initialLocation: '/signIn' ,
4848 navigatorKey: _rootNavigatorKey,
49- debugLogDiagnostics: true ,
49+ // debugLogDiagnostics: true,
5050 redirect: (context, state) {
5151 final onboardingRepository =
5252 ref.read (onboardingRepositoryProvider).requireValue;
Original file line number Diff line number Diff line change 1+ import 'dart:developer' ;
2+
3+ import 'package:flutter/material.dart' ;
4+ import 'package:flutter_riverpod/flutter_riverpod.dart' ;
5+ import 'package:starter_architecture_flutter_firebase/src/routing/app_router.dart' ;
6+
7+ // Listener widget to track screen views. Adapted from:
8+ // https://github.com/flutter/flutter/issues/112196#issuecomment-1680382232
9+ class GoRouterDelegateListener extends ConsumerStatefulWidget {
10+ const GoRouterDelegateListener ({super .key, required this .child});
11+ final Widget child;
12+
13+ @override
14+ ConsumerState <GoRouterDelegateListener > createState () =>
15+ _GoRouterListenerState ();
16+ }
17+
18+ class _GoRouterListenerState extends ConsumerState <GoRouterDelegateListener > {
19+ // Helper getter for the GoRouter instance
20+ late final routerDelegate = ref.read (goRouterProvider).routerDelegate;
21+
22+ @override
23+ void initState () {
24+ super .initState ();
25+ routerDelegate.addListener (_listener);
26+ }
27+
28+ @override
29+ void dispose () {
30+ routerDelegate.removeListener (_listener);
31+ super .dispose ();
32+ }
33+
34+ void _listener () {
35+ final config = routerDelegate.currentConfiguration;
36+ final screenName = config.last.route.name;
37+ if (screenName != null ) {
38+ final pathParams = config.pathParameters;
39+ // TODO: Add your own logging or analytics screen tracking code
40+ log ('screenName: $screenName , pathParams: $pathParams ' );
41+ }
42+ }
43+
44+ @override
45+ Widget build (BuildContext context) {
46+ return widget.child;
47+ }
48+ }
You can’t perform that action at this time.
0 commit comments