diff --git a/packages/dropdown_button2/lib/src/dropdown_button2.dart b/packages/dropdown_button2/lib/src/dropdown_button2.dart index 534daa9..d6a78d1 100644 --- a/packages/dropdown_button2/lib/src/dropdown_button2.dart +++ b/packages/dropdown_button2/lib/src/dropdown_button2.dart @@ -390,10 +390,11 @@ class DropdownButton2 extends StatefulWidget { final bool _isFocused; @override - State> createState() => _DropdownButton2State(); + State> createState() => DropdownButton2State(); } -class _DropdownButton2State extends State> +/// The [State] for a [DropdownButton2]. +class DropdownButton2State extends State> with WidgetsBindingObserver { int? _selectedIndex; _DropdownRoute? _dropdownRoute; @@ -439,10 +440,10 @@ class _DropdownButton2State extends State> } _actionMap = >{ ActivateIntent: CallbackAction( - onInvoke: (ActivateIntent intent) => _handleTap(), + onInvoke: (ActivateIntent intent) => handleTap(), ), ButtonActivateIntent: CallbackAction( - onInvoke: (ButtonActivateIntent intent) => _handleTap(), + onInvoke: (ButtonActivateIntent intent) => handleTap(), ), }; } @@ -525,7 +526,7 @@ class _DropdownButton2State extends State> void _programmaticallyOpenDropdown() { if (_enabled && !_isMenuOpen.value) { - _handleTap(); + handleTap(); } } @@ -562,7 +563,8 @@ class _DropdownButton2State extends State> .add(_dropdownStyle.scrollPadding ?? EdgeInsets.zero); } - void _handleTap() { + /// allow handling tap event for public state + void handleTap() { final NavigatorState navigator = Navigator.of(context, rootNavigator: _dropdownStyle.isFullScreen ?? _dropdownStyle.useRootNavigator); @@ -874,8 +876,8 @@ class _DropdownButton2State extends State> actions: _actionMap, child: InkWell( mouseCursor: effectiveMouseCursor, - onTap: _enabled && !widget.openWithLongPress ? _handleTap : null, - onLongPress: _enabled && widget.openWithLongPress ? _handleTap : null, + onTap: _enabled && !widget.openWithLongPress ? handleTap : null, + onLongPress: _enabled && widget.openWithLongPress ? handleTap : null, canRequestFocus: _enabled, focusNode: _focusNode, autofocus: widget.autofocus,