Fix MenuController.isOpen throws when unattached (#157331)

## Description

This PR change `MenuController.isOpen` to return false when the `MenuController` is not attached.
Previously `MenuController.isOpen` thrown an assert error when the menu controller was unattached.
With this PR, it is now possible to have some widgets outside the `MenuAnchor` body depending on the menu controller state.

## Related Issue

Fixes [Querying isOpen state for a menu controller that was never attached throws an assertion error](https://github.com/flutter/flutter/issues/157329).

## Tests

Adds 1 test.
This commit is contained in:
Bruno Leroux 2024-10-22 20:49:15 +02:00 committed by GitHub
parent e9fb545c05
commit 260bee4d08
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 2 deletions

View File

@ -650,8 +650,7 @@ class MenuController {
/// Whether or not the associated menu is currently open.
bool get isOpen {
assert(_anchor != null);
return _anchor!._isOpen;
return _anchor?._isOpen ?? false;
}
/// Close the menu that this menu controller is associated with.

View File

@ -4732,6 +4732,11 @@ void main() {
await tester.pump();
expect(tester.takeException(), isNull);
});
testWidgets('Unattached MenuController returns false when calling isOpen', (WidgetTester tester) async {
final MenuController controller = MenuController();
expect(controller.isOpen, false);
});
}
List<Widget> createTestMenus({