From 67bcd242bc83e851873283a444d02097d3cd45dd Mon Sep 17 00:00:00 2001 From: cogwheel0 <172976095+cogwheel0@users.noreply.github.com> Date: Tue, 16 Dec 2025 08:14:55 +0530 Subject: [PATCH] feat(responsive_drawer): Cache tablet state to optimize context access and improve performance --- .../widgets/responsive_drawer_layout.dart | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/shared/widgets/responsive_drawer_layout.dart b/lib/shared/widgets/responsive_drawer_layout.dart index 2a837b7..f6ade91 100644 --- a/lib/shared/widgets/responsive_drawer_layout.dart +++ b/lib/shared/widgets/responsive_drawer_layout.dart @@ -65,9 +65,13 @@ class ResponsiveDrawerLayoutState extends State ); late bool _isTabletDocked = widget.tabletInitiallyDocked; + /// Cached tablet state to avoid accessing context when unmounted. + bool _cachedIsTablet = false; + bool _isTablet(BuildContext context) { final size = MediaQuery.of(context).size; - return size.shortestSide >= 600; + _cachedIsTablet = size.shortestSide >= 600; + return _cachedIsTablet; } double get _panelWidth => @@ -79,8 +83,17 @@ class ResponsiveDrawerLayoutState extends State double get _edgeWidth => MediaQuery.of(context).size.width * widget.edgeFraction; + /// Returns whether the drawer is currently open. + /// Uses cached tablet state to avoid context access issues when unmounted. bool get isOpen => - _isTablet(context) ? _isTabletDocked : _controller.value == 1.0; + _cachedIsTablet ? _isTabletDocked : _controller.value == 1.0; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + // Update cached tablet state when MediaQuery changes + _isTablet(context); + } @override void didUpdateWidget(covariant ResponsiveDrawerLayout oldWidget) {