/// Skips building while another route covers this one, then rebuilds on pop. library; import 'package:flutter/material.dart'; /// Shared observer — register on [MaterialApp.navigatorObservers]. final RouteObserver> appRouteObserver = RouteObserver>(); /// Builds via [builder] only when this route is not covered by a pushed page. class SkipBuildWhenCovered extends StatefulWidget { const SkipBuildWhenCovered({ super.key, required this.builder, this.placeholder = const SizedBox.expand(), }); final WidgetBuilder builder; final Widget placeholder; @override State createState() => _SkipBuildWhenCoveredState(); } class _SkipBuildWhenCoveredState extends State with RouteAware { var _covered = false; @override void didChangeDependencies() { super.didChangeDependencies(); final route = ModalRoute.of(context); if (route is PageRoute) { appRouteObserver.subscribe(this, route); } } @override void dispose() { appRouteObserver.unsubscribe(this); super.dispose(); } @override void didPushNext() { if (!_covered) setState(() => _covered = true); } @override void didPopNext() { if (_covered) setState(() => _covered = false); } @override Widget build(BuildContext context) { if (_covered) return widget.placeholder; return widget.builder(context); } }