From 1750d6079e34f77598f31a8629c3338091871981 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Thu, 7 May 2020 18:07:38 +0200 Subject: [PATCH] Highlight active option in AppBar --- .../appbar_custom_dropdown_widget.dart | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/ui/widgets/tablet_mode/appbar_custom_dropdown_widget.dart b/lib/ui/widgets/tablet_mode/appbar_custom_dropdown_widget.dart index 71ed11f..77923ee 100644 --- a/lib/ui/widgets/tablet_mode/appbar_custom_dropdown_widget.dart +++ b/lib/ui/widgets/tablet_mode/appbar_custom_dropdown_widget.dart @@ -30,25 +30,34 @@ class AppBarCustomDropDownWidget extends StatefulWidget { class _AppBarCustomDropDownWidgetState extends State { + bool _visible = false; + @override Widget build(BuildContext context) { return IconButtonWithBadge( icon: widget.icon, onPressed: toggleOverlay, number: widget.notificationsBadge, + active: _visible, ); } void toggleOverlay() async { - RenderBox renderBox = context.findRenderObject(); - final size = renderBox.size; - final offset = renderBox.localToGlobal(Offset(size.width, size.height)); + setState(() => _visible = !_visible); - Navigator.of(context).push(_AppBarCustomPopupRoute( - onBuild: widget.onBuildOverlay, - showContext: context, - offset: offset, - )); + if (_visible) { + RenderBox renderBox = context.findRenderObject(); + final size = renderBox.size; + final offset = renderBox.localToGlobal(Offset(size.width, size.height)); + + Navigator.of(context).push(_AppBarCustomPopupRoute( + onBuild: widget.onBuildOverlay, + showContext: context, + offset: offset, + onDispose: () => setState(() => _visible = false), + )); + } else + Navigator.of(context).pop(); } } @@ -56,13 +65,22 @@ class _AppBarCustomPopupRoute extends PopupRoute { final BuildContext showContext; final Widget Function(BuildContext) onBuild; final Offset offset; + final void Function() onDispose; _AppBarCustomPopupRoute({ @required this.showContext, @required this.onBuild, @required this.offset, + @required this.onDispose, }); + @override + void dispose() { + super.dispose(); + + onDispose(); + } + @override Color get barrierColor => null;