Fix Semantics expanded state not updating in PopupMenuButton and DropdownButton (#183475)

Fixes #183432

## Description

`_isMenuExpanded` is updated without calling `setState()` in both
`PopupMenuButton` and `DropdownButton`, so the `Semantics(expanded:
_isMenuExpanded)` widget doesn't rebuild.

**`PopupMenuButton`**: The `expanded` state never updates at all since
there is no `setState()` call anywhere in `PopupMenuButtonState`.

**`DropdownButton`**: Currently masked by `_handleFocusChanged`, which
happens to call `setState()` whenever focus changes on open/close, but
should not rely on this side effect.

### Changes

- Wrapped `_isMenuExpanded` assignments with `setState()` in both
widgets.
- For `DropdownButton`, moved `_isMenuExpanded = false` from
`_removeDropdownRoute()` to the `.then()` callback with a `mounted`
guard. This avoids unnecessary `setState()` calls when
`_removeDropdownRoute()` is invoked during `dispose()` or orientation
changes in `build()`, where the menu state isn't actually changing from
user interaction.

## Tests

Added regression tests for both `PopupMenuButton` and `DropdownButton`
to verify the `expanded` semantics state updates correctly when the menu
opens and closes.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
4 files changed
tree: 63d4a2c98802b186bddfe7a1f8328c6bfc51b6e0
  1. examples/
  2. packages/