Repository navigation
Commit ad38919
authored
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.1 parent edad06c commit ad38919
4 files changed
Lines changed: 138 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1401 | 1401 | | |
1402 | 1402 | | |
1403 | 1403 | | |
1404 | | - | |
1405 | 1404 | | |
1406 | 1405 | | |
1407 | 1406 | | |
| |||
1505 | 1504 | | |
1506 | 1505 | | |
1507 | 1506 | | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
1508 | 1512 | | |
1509 | 1513 | | |
1510 | 1514 | | |
1511 | 1515 | | |
1512 | 1516 | | |
1513 | 1517 | | |
1514 | 1518 | | |
1515 | | - | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
1516 | 1522 | | |
1517 | 1523 | | |
1518 | 1524 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1692 | 1692 | | |
1693 | 1693 | | |
1694 | 1694 | | |
1695 | | - | |
| 1695 | + | |
| 1696 | + | |
| 1697 | + | |
1696 | 1698 | | |
1697 | 1699 | | |
1698 | 1700 | | |
| |||
1714 | 1716 | | |
1715 | 1717 | | |
1716 | 1718 | | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
1717 | 1722 | | |
1718 | 1723 | | |
1719 | 1724 | | |
1720 | 1725 | | |
1721 | 1726 | | |
1722 | | - | |
1723 | 1727 | | |
1724 | 1728 | | |
1725 | 1729 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1440 | 1440 | | |
1441 | 1441 | | |
1442 | 1442 | | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
| 1453 | + | |
| 1454 | + | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
1443 | 1499 | | |
1444 | 1500 | | |
1445 | 1501 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1382 | 1382 | | |
1383 | 1383 | | |
1384 | 1384 | | |
| 1385 | + | |
| 1386 | + | |
| 1387 | + | |
| 1388 | + | |
| 1389 | + | |
| 1390 | + | |
| 1391 | + | |
| 1392 | + | |
| 1393 | + | |
| 1394 | + | |
| 1395 | + | |
| 1396 | + | |
| 1397 | + | |
| 1398 | + | |
| 1399 | + | |
| 1400 | + | |
| 1401 | + | |
| 1402 | + | |
| 1403 | + | |
| 1404 | + | |
| 1405 | + | |
| 1406 | + | |
| 1407 | + | |
| 1408 | + | |
| 1409 | + | |
| 1410 | + | |
| 1411 | + | |
| 1412 | + | |
| 1413 | + | |
| 1414 | + | |
| 1415 | + | |
| 1416 | + | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
| 1421 | + | |
| 1422 | + | |
| 1423 | + | |
| 1424 | + | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
| 1428 | + | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
| 1433 | + | |
| 1434 | + | |
| 1435 | + | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
| 1439 | + | |
| 1440 | + | |
| 1441 | + | |
| 1442 | + | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
1385 | 1453 | | |
1386 | 1454 | | |
1387 | 1455 | | |
| |||
0 commit comments