Skip to content

Commit 0672910

Browse files
committed
Add GoRouterDelegateListener class
1 parent d546d36 commit 0672910

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

lib/src/app.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
55
import 'package:force_update_helper/force_update_helper.dart';
66
import 'package:starter_architecture_flutter_firebase/src/routing/app_router.dart';
77
import 'package:starter_architecture_flutter_firebase/src/routing/app_startup.dart';
8+
import 'package:starter_architecture_flutter_firebase/src/routing/go_router_delegate_listener.dart';
89
import 'package:starter_architecture_flutter_firebase/src/utils/alert_dialogs.dart';
910
import '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
},

lib/src/routing/app_router.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
}

0 commit comments

Comments
 (0)