import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:simplecloudnotifier/state/app_bar_state.dart'; class Navi { static final SCNRouteObserver routeObserver = SCNRouteObserver(); static final RouteObserver<ModalRoute<void>> modalRouteObserver = RouteObserver<ModalRoute<void>>(); static void push<T extends Widget>(BuildContext context, T Function() builder) { Provider.of<AppBarState>(context, listen: false).setLoadingIndeterminate(false); Provider.of<AppBarState>(context, listen: false).setShowSearchField(false); Navigator.push(context, MaterialPageRoute<T>(builder: (context) => builder())); } static void popToRoot(BuildContext context) { Provider.of<AppBarState>(context, listen: false).setLoadingIndeterminate(false); Provider.of<AppBarState>(context, listen: false).setShowSearchField(false); Navigator.popUntil(context, (route) => route.isFirst); } static void popDialog(BuildContext dialogContext) { Navigator.pop(dialogContext); } } class SCNRouteObserver extends RouteObserver<PageRoute<dynamic>> { @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { super.didPush(route, previousRoute); if (route is PageRoute) { AppBarState().setLoadingIndeterminate(false); AppBarState().setShowSearchField(false); print('[SCNRouteObserver] .didPush()'); } } @override void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) { super.didReplace(newRoute: newRoute, oldRoute: oldRoute); if (newRoute is PageRoute) { AppBarState().setLoadingIndeterminate(false); AppBarState().setShowSearchField(false); print('[SCNRouteObserver] .didReplace()'); } } @override void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) { super.didPop(route, previousRoute); if (previousRoute is PageRoute && route is PageRoute) { AppBarState().setLoadingIndeterminate(false); AppBarState().setShowSearchField(false); print('[SCNRouteObserver] .didPop()'); } } }