Flutter tracking current screen name using RouteObserver
Here is a route observer, my_route_observer.dart
import 'package:flutter/material.dart'; import 'package:myapp/analytics.dart'; class MyRouteObserver extends RouteObserver> { void _sendScreenView(PageRoute route) { var screenName = route.settings.name; // set current screen in analytics or somewhere else Analytics.setCurrentScreen(screenName); print('screenName $screenName'); } @override void didPush(Route route, Route ? previousRoute) { super.didPush(route, previousRoute); if (route is PageRoute) { _sendScreenView(route); } } @override void didReplace({Route ? newRoute, Route ? oldRoute}) { super.didReplace(newRoute: newRoute, oldRoute: oldRoute); if (newRoute is PageRoute) { _sendScreenView(newRoute); } } @override void didPop(Route route, Route ? previousRoute) { super.didPop(route, previousRoute); if (previousRoute is PageRoute && route is PageRoute) { _sendScreenView(previousRoute); } } }
Here is how to register the above route observer in your root widget.
class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'MyApp', navigatorObservers: [MyRouteObserver()], initialRoute: /home, routes: { 'home': (context) => const Home(), 'SecondScreen': (context) => const SecondScreen(), 'ThirdScreen': (context) => const ThirdScreen(), }, ); } }
If the screen is not registered in the routes, make sure to set the `route.settings.name` when pushing it. Otherwise, the screen name will be null because it not set when it is pushed.
Navigator.of(context).push( MaterialPageRoute( settings: RouteSettings(name: 'FourthScreen'), builder: (context) { return FourthScreen(); }, ), );
Here is a sample Analytics class that just tracks the current screen.
class Analytics { static ScreenName _currentScreen = ScreenName.home_screen; static ScreenName get currentScreen => _currentScreen; static setCurrentScreen(ScreenName screenName) { _currentScreen = screenName; } }
Search within Codexpedia
Custom Search
Search the entire web
Custom Search
Related Posts