Repository navigation
Description
Steps to reproduce
Steps to reproduce described here duobaseio/forui#854, as this bug was discovered in an attempt to test Flutter app that uses forui library using Maestro testing framework. Tests were failing after showing popover (date field, calendar) etc, and visual inspection in Maestro Studio showed werid semantic node coordnate shrinking (red borders outlines how Maestro "sees" semantic nodes).
Further discussion with forui devs and analysis of Flutter's commits revealed the likely culprit: fccfa97
Further test with pre-commit and post-commit version of Flutter confirmed that bug doesn't exist in pre-commit version. More details and video here - duobaseio/forui#854 (comment)
After clicking outside of the field (to dismiss popup):
Expected results
Semantic nodes coordinates are not corrupted or shrinked..
Actual results
Semantic nodes' coordinates are corrupted, making further testing impossible.
Code sample
See linked forui issue for steps to reproduce:
Code sample
pubspec.yaml
name: forui_repro
environment:
sdk: '>=3.0.0 <4.0.0'
dependencies:
flutter:
sdk: flutter
forui: 0.18.1
main.dart
import 'package:flutter/material.dart';
import 'package:forui/forui.dart';
void main() => runApp(const App());
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) => MaterialApp(
home: FScaffold(
child: Center(
child: const SizedBox(
width: 300, child: FDateField(label: Text('Inline Dates'))),
),
),
);
}Screenshots or Video
Screenshots / Video demonstration
Screen.Recording.2026-02-18.at.17.58.08.mov
Testing it with a bit more complex MVE:
pre-commit version:
Screen.Recording.2026-02-19.at.12.14.37.mov
post-commit version
Screen.Recording.2026-02-19.at.12.16.41.mov
Logs
Logs
[Paste your logs here]Flutter Doctor output
Doctor output
pre-commit version
[!] Flutter (Channel [user-branch], 3.42.0-0.0.pre, on macOS 26.2 25C56 darwin-arm64, locale en-US)
! Flutter version 3.42.0-0.0.pre on channel [user-branch] at /Users/divan/src/flutter_pre_fcc
Currently on an unknown channel. Run `flutter channel` to switch to an official channel.
If that doesn't fix the issue, reinstall Flutter by following instructions at
https://flutter.dev/setup.
! Upstream repository unknown source is not a standard remote.
Set environment variable "FLUTTER_GIT_URL" to unknown source to dismiss this error.
[✓] Android toolchain - develop for Android devices (Android SDK version 36.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 26.2)
[✓] Chrome - develop for the web
[✓] Connected device (4 available)
! Error: Browsing on the local area network for divan‘s iPad. Ensure the device is unlocked and
attached with a cable or associated with the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
! Error: Browsing on the local area network for Ivan’s Apple Watch. Ensure the device is unlocked and
discoverable via Bluetooth. (code -27)
! Error: Browsing on the local area network for Not Ivan‘s iPad. Ensure the device is unlocked and
attached with a cable or associated with the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
! Error: Browsing on the local area network for Ivan’s iPhone. Ensure the device is unlocked and
attached with a cable or associated with the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
[✓] Network resourcespost-commit version
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel [user-branch], 3.42.0-0.0.pre, on macOS 26.2 25C56 darwin-arm64, locale en-US)
! Flutter version 3.42.0-0.0.pre on channel [user-branch] at /Users/divan/src/flutter_pre_fcc
Currently on an unknown channel. Run `flutter channel` to switch to an official channel.
If that doesn't fix the issue, reinstall Flutter by following instructions at
https://flutter.dev/setup.
! Upstream repository unknown source is not a standard remote.
Set environment variable "FLUTTER_GIT_URL" to unknown source to dismiss this error.
[✓] Android toolchain - develop for Android devices (Android SDK version 36.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 26.2)
[✓] Chrome - develop for the web
[✓] Connected device (4 available)
! Error: Browsing on the local area network for divan‘s iPad. Ensure the device is unlocked and
attached with a cable or associated with the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
! Error: Browsing on the local area network for Ivan’s Apple Watch. Ensure the device is unlocked and
discoverable via Bluetooth. (code -27)
! Error: Browsing on the local area network for Not Ivan‘s iPad. Ensure the device is unlocked and
attached with a cable or associated with the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
! Error: Browsing on the local area network for Ivan’s iPhone. Ensure the device is unlocked and
attached with a cable or associated with the same local area network as this Mac.
The device must be opted into Developer Mode to connect wirelessly. (code -27)
[✓] Network resources
Activity
mbcorona commentedon Feb 23, 2026
Hi @divan, thanks for the detailed report, labeling team-accessibility, and regression for further investigation.
chunhtai commentedon Feb 25, 2026
I am not entirely sure whether the root cause is in flutter or in the testing library. The change introduced a different transform in Semantics node that is specific for children in traversal order, and there is different transform for children in hittest order because now the traversal tree and hittest tree may have different shape. It is possible which ever software calculate the bound is using the wrong transform.
cc @QuncCccccc Can you take a look at this?
divan commentedon Feb 27, 2026
I posted the link to the issue to Maestro discord chat as well, in case there are devs who might be willing to take a look at it as well.
divan commentedon Feb 27, 2026
@chunhtai here is one response from Maestro team support:
I haven't tried Xcode tool myself, but in the chat with forui dev I remember he said that observed the same behaviour in Xcode accesibility inspector.
So it's most likely the Flutter's issue, and not the Maestro's one.
Pante commentedon Feb 27, 2026
Just chipping in, but I can confirm that the issue persists with Xcode accesibility inspector.
I also have an MVE that replicates the issue with just Materiel widgets: https://gist.github.com/Pante/d7b2d1755802bafab022180d6a373063.
chunhtai commentedon Feb 27, 2026
gotcha, yeah that sounds like a flutter issue.
QuncCccccc commentedon Mar 3, 2026
Thanks for providing the sample code to reproduce! The semantics tree from the framework side looks correct. So I'm wondering whether it's the engine side doesn't interpret data correctly? CC: @chunhtai
flutter: SemanticsNode#0
flutter: │ Rect.fromLTRB(0.0, 0.0, 1668.0, 2388.0)
flutter: │
flutter: └─SemanticsNode#1
flutter: │ Rect.fromLTRB(0.0, 0.0, 834.0, 1194.0) scaled by 2.0x
flutter: │ textDirection: ltr
flutter: │
flutter: └─SemanticsNode#2
flutter: │ Rect.fromLTRB(0.0, 0.0, 834.0, 1194.0)
flutter: │ sortKey: OrdinalSortKey#caba3(order: 0.0)
flutter: │
flutter: └─SemanticsNode#3
flutter: │ Rect.fromLTRB(0.0, 0.0, 834.0, 1194.0)
flutter: │ flags: scopesRoute
flutter: │
flutter: ├─SemanticsNode#4
flutter: │ │ Rect.fromLTRB(340.7, 539.0, 493.3, 587.0)
flutter: │ │ traversalParentIdentifier: _OverlayPortalState#d4204
flutter: │ │
flutter: │ ├─SemanticsNode#5
flutter: │ │ Rect.fromLTRB(0.0, 0.0, 152.5, 48.0)
flutter: │ │ actions: tap
flutter: │ │ flags: isButton, hasEnabledState, isEnabled, isFocusable
flutter: │ │ label: "Hide (setState)"
flutter: │ │ textDirection: ltr
flutter: │ │
flutter: │ └─SemanticsNode#8
flutter: │ │ Rect.fromLTRB(0.0, 0.0, 834.0, 1194.0)
flutter: │ │ traversalChildIdentifier: _OverlayPortalState#d4204
flutter: │ │
flutter: │ └─SemanticsNode#9
flutter: │ │ Rect.fromLTRB(340.7, 587.0, 540.7, 675.0)
flutter: │ │ label:
flutter: │ │ "WithSetState Item 1
flutter: │ │ WithSetState Item 2"
flutter: │ │ textDirection: ltr
flutter: │ │
flutter: │ └─SemanticsNode#10
flutter: │ Rect.fromLTRB(56.7, 40.0, 143.3, 88.0)
flutter: │ actions: tap
flutter: │ flags: isButton, hasEnabledState, isEnabled, isFocusable
flutter: │ label: "Close"
flutter: │ textDirection: ltr
flutter: │
flutter: └─SemanticsNode#6
flutter: │ Rect.fromLTRB(327.4, 607.0, 506.6, 655.0)
flutter: │ traversalParentIdentifier: _OverlayPortalState#7d113
flutter: │
flutter: └─SemanticsNode#7
flutter: Rect.fromLTRB(0.0, 0.0, 179.2, 48.0)
flutter: actions: tap
flutter: flags: isButton, hasEnabledState, isEnabled, isFocusable
flutter: label: "Show (no setState)"
flutter: textDirection: ltr
flutter-triage-bot commentedon Mar 3, 2026
The
triaged-accessibilitylabel is irrelevant if there is noteam-accessibilitylabel orfyi-accessibilitylabel.okorohelijah commentedon Mar 12, 2026
@QuncCccccc from triage: were you able to check if it works when the pr is reverted?
divan commentedon Mar 30, 2026
Any progress on this?.
MrRobot2002 commentedon Apr 9, 2026
The same issue happens to me on an angular application. The save to files button coordinates are way off, and impossible to test.
Jjagg commentedon Jun 8, 2026
Here's another demo of this issue (recorded on an iPhone 17 Pro Simulator running iOS 26.1):
Screen.Recording.2026-06-08.at.14.42.41.mov
Maybe this is useful to know: the only elements I needed for this repro were
MaterialApp.routerandOverlayPortal. UsingMaterialApp(home: ReproScreen())did not reproduce the issue.I can also reconfirm that the
Semanticstree looked correct.Looking at the commit that introduced the bug (fccfa97); it seems like the new transform behavior was not implement in the ios
accessibility_bridge.mm.Here's the
main.dartof the repro I used for the video:Details
tpaik18 commentedon Jun 8, 2026
Would love if priority could be bumped up on this; this issue appears to break our XCUITest for our app when upgrading Flutter from 3.38 to current version.
Fixes OverlayPortal semantics bounds corruption (flutter#192139)
github-actions commentedon Sep 17, 2026
This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of
flutter doctor -vand a minimal reproduction of the issue.