diff --git a/lib/src/draggable_menu/menu/controller.dart b/lib/src/draggable_menu/menu/controller.dart index f1f7441..05e2420 100644 --- a/lib/src/draggable_menu/menu/controller.dart +++ b/lib/src/draggable_menu/menu/controller.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; class DraggableMenuController extends ChangeNotifier { late void Function(int level) animateTo; - ///You can use `DraggableMenuController` to control the `DraggableMenu` widget. /// /// Provide the `DraggableMenuController` to the `controller` parameter of the `DraggableMenu`. @@ -27,4 +26,6 @@ class DraggableMenuController extends ChangeNotifier { init(void Function(int level) animateTo) { this.animateTo = (level) => animateTo(level); } + + bool isOpen = false; } diff --git a/lib/src/draggable_menu/menu/menu.dart b/lib/src/draggable_menu/menu/menu.dart index ef76f5f..3ef4de8 100644 --- a/lib/src/draggable_menu/menu/menu.dart +++ b/lib/src/draggable_menu/menu/menu.dart @@ -171,7 +171,7 @@ class DraggableMenu extends StatefulWidget { /// /// Throws if the level doesn't exist. final int startLevel; - + /// Creates a Draggable Menu widget. /// /// To push the Draggable Menu to the screen, you can use the `DraggableMenu`'s `open` and `openReplacement` methods. @@ -239,8 +239,10 @@ class DraggableMenu extends StatefulWidget { Curve? popCurve, bool? barrier, Color? barrierColor, - }) => - Navigator.of(context).push( + DraggableMenuController? controller, + }) { + controller?.isOpen = true; + return Navigator.of(context).push( MenuRoute( child: draggableMenu, duration: animationDuration, @@ -250,6 +252,7 @@ class DraggableMenu extends StatefulWidget { barrierColor: barrierColor, ), ); + } /// Opens the given Draggable Menu using `Navigator`'s `pushReplacement` method. /// @@ -262,8 +265,10 @@ class DraggableMenu extends StatefulWidget { Curve? popCurve, bool? barrier, Color? barrierColor, - }) => - Navigator.of(context).pushReplacement( + DraggableMenuController? controller, + }) { + controller?.isOpen = true; + return Navigator.of(context).pushReplacement( MenuRoute( child: draggableMenu, duration: animationDuration, @@ -273,6 +278,7 @@ class DraggableMenu extends StatefulWidget { barrierColor: barrierColor, ), ); + } @override State createState() => _DraggableMenuState(); @@ -344,9 +350,14 @@ class _DraggableMenuState extends State void _controllerInit() { // Initilizes the controller (Passes the _animeteTo method) widget.controller?.init((int level) => _animateTo(level)); + widget.controller?.isOpen = true; // Adds itself as listener to the controller - widget.controller?.addListener(() => setState(() {})); + widget.controller?.addListener(() { + if (mounted) { // Check if the state is still mounted + setState(() {}); + } + }); } /// Initilizes the `DraggableMenu` widget's levels. @@ -889,6 +900,7 @@ class _DraggableMenuState extends State @override void dispose() { + widget.controller?.isOpen = false; _ticker.dispose(); _animationController.dispose(); super.dispose();