Repository navigation
Description
Steps to reproduce
- Create an empty flutter project in Windows.
- Replace main.dart with my repro code.
- run and mouse hovering between container marked as A and B.
Then you will see the errors in console.
It seems only impacting Windows.
Here is my own mechanism analysis, just for reference.
ListView's two-pane semantics: RenderViewport adds useTwoPaneSemantics tag, causing _RenderScrollSemantics.assembleSemanticsNode() to create a synthetic _innerNode. This extra indirection isolates tooltip children from direct semantics update propagation.
Tooltip's OverlayPortal traversal grafting: Each Tooltip's overlay child (_RenderDeferredLayoutBox) is physically a child of _RenderTheater but semantically "grafted" to the tooltip's child via traversalChildIdentifier/traversalParentIdentifier.
The Bug Sequence (hover A → B)
- _handleMouseEnter on B fires — starts B's show (immediate) and A's dismiss (animated, 75ms)
- B's _RenderDeferredLayoutBox is added to the theater → markNeedsSemanticsUpdate()
- During SemanticsOwner.sendSemanticsUpdate(), A's deferred box node is detached and filtered into _detachedNodes
- Critical bug: Because A's node is filtered out before the traversal parent notification code runs, Tooltip A's child (TC_A) is never told its grafted traversal child is gone
- TC_A is never added to updatedVisitedNodes, so it never calls _addToUpdate() — no update sent to the engine
- The Windows AXTree still thinks TC_A has A's overlay node as a child, but that node no longer exists
- AXTree::Unserialize() fails: "* will not be in the tree and is not the new root"
Expected results
No errors.
Actual results
Throwing errors, though feature seems still not impacted.
Code sample
Code sample
Create an empty project and put this in main.dart
// Repro: ListView + 2 Tooltips → AXTree error on hover (Windows)
//
// Steps:
// 1. flutter run -d windows
// 2. Hover mouse over box A, then move to box B
// 3. Watch console for:
// [ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)]
// Failed to update ui::AXTree
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'AXTree Tooltip Repro',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
home: const TooltipReproPage(),
);
}
}
class TooltipReproPage extends StatelessWidget {
const TooltipReproPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('AXTree Tooltip Repro')),
body: ListView(
children: [
Row(
children: [
Tooltip(
message: 'Tooltip A',
child: Container(
width: 100,
height: 100,
alignment: Alignment.center,
decoration: BoxDecoration(
color: const Color(0xFFE3F2FD),
borderRadius: BorderRadius.circular(8),
border: Border.all(
width: 1,
color: const Color(0xFF90CAF9),
),
),
child: const Text('A'),
),
),
const SizedBox(width: 16),
Tooltip(
message: 'Tooltip B',
child: Container(
width: 100,
height: 100,
alignment: Alignment.center,
decoration: BoxDecoration(
color: const Color(0xFFF5F5F5),
borderRadius: BorderRadius.circular(8),
border: Border.all(
width: 1,
color: const Color(0xFFE0E0E0),
),
),
child: const Text('B'),
),
),
],
),
],
),
);
}
}Screenshots or Video
Screenshots / Video demonstration
N/A
Logs
Logs
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 9 will not be in the tree and is not the new root
6
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 13 will not be in the tree and is not the new root
5
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 17 will not be in the tree and is not the new root
6
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 19 will not be in the tree and is not the new root
7
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 23 will not be in the tree and is not the new root
8
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 27 will not be in the tree and is not the new root
7
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 31 will not be in the tree and is not the new root
21
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 35 will not be in the tree and is not the new root
3
[ERROR:flutter/shell/platform/common/accessibility_bridge.cc(114)] Failed to update ui::AXTree, error: 47 will not be in the tree and is not the new root
CHAT
FLUTTER AXTREE UPDATE ERROR WITH MULTIPLE ATTACHMENTS
Flutter Doctor output
Doctor output
flutter doctor -v
[√] Flutter (Channel stable, 3.41.1, on Microsoft Windows [Version 10.0.26200.7781],
locale en-US) [590ms]
• Flutter version 3.41.1 on channel stable at C:\Repos\flutter\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 582a0e7c55 (3 days ago), 2026-02-12 17:12:32 -0800
• Engine revision 3452d735bd
• Dart version 3.11.0
• DevTools version 2.54.1
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop,
enable-windows-desktop, enable-android, enable-ios, cli-animations,
enable-native-assets, omit-legacy-version-file, enable-lldb-debugging,
enable-uiscene-migration
[√] Windows Version (Windows 11 or higher, 25H2, 2009) [1,186ms]
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [478ms]
• Android SDK at C:\Users\yuanyang\AppData\Local\Android\sdk
• Emulator version 35.2.10.0 (build_id 12414864) (CL:N/A)
X cmdline-tools component is missing.
Try installing or updating Android Studio.
Alternatively, download the tools from
https://developer.android.com/studio#command-line-tools-only and make sure to set
the ANDROID_HOME environment variable.
See https://developer.android.com/studio/command-line for See https://developer.android.com/studio/command-line for more details.
X Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/to/windows-android-setup for more details.
[√] Chrome - develop for the web [138ms]
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Visual Studio - develop Windows apps (Visual Studio Enterprise 2022 17.14.26)
[137ms]
• Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Enterprise
• Visual Studio Enterprise 2022 version 17.14.36930.0
• Windows 10 SDK version 10.0.26100.0
[√] Connected device (3 available) [399ms]
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version
10.0.26200.7781]
• Chrome (web) • chrome • web-javascript • Google Chrome 144.0.7559.133
• Edge (web) • edge • web-javascript • Microsoft Edge 145.0.3800.58
[√] Network resources [782ms]
• All expected network resources are available.
! Doctor found issues in 1 category.
Activity
puneetkukreja98 commentedon Feb 19, 2026
@yangyuan Thanks for reporting the issue.
I was able to reproduce this issue on Windows following the steps provided.
Observation:
The AXTree errors appear in the console only when Windows Narrator is enabled.
Flutter doctor -v
LOGS
ReinisSprogis commentedon Feb 26, 2026
I also have this problem 3.41.2, on Microsoft Windows [Version 10.0.19045.6466],
It seems like the Tooltip in some cases are triggering this error and it's not going away after hot restart.
Initially some tooltips don't throw this error, but if I wrap DropdownButton in Tooltip and hover over it, then these errors will start flooding console for all widgets wrapped in Tooltip. I could not stand it anymore and disabled semantics for app altogether.
fix: 规避 Flutter Windows AXTree 报错 (flutter/flutter#182444)
docs(agents): document benign Flutter AXTree accessibility log on Win…
Mute the engine's AXTree log spam on Windows
3 remaining items
Name the Windows AXTree error so it is not filed as our bug
Name the accessibility error as upstream
docs(agents): document benign Flutter AXTree accessibility log on Win…
SamHL commentedon Sep 1, 2026
On Windows release builds this is not only log spam. The same corrupted tree state terminates the process.
AccessibilityBridge::CreateRemoveReparentedNodesUpdatedereferenceschild->parent()guarded only by anassert, which is compiled out in release:Once
ui::AXTree::Unserializehas failed, which is exactly the failure this issue reports, the tree retains a node whoseparent()is null, and the next semantics update naming it as a child walks into it. It is dereferenced again a few lines down atint32_t parent_id = child->parent()->id();.This runs on the platform thread inside
WM_SIZE, so the access violation escapes a window procedure. Windows cannot propagate an exception across the kernel callback boundary, so it terminates the process withSTATUS_FATAL_USER_CALLBACK_EXCEPTION(0xC000041D). There is no Dart error, no Flutter error and no Windows Error Reporting entry. The process simply disappears, which is why this took a debugger to find.Symbolicated against the shipped engine PDB (3.47.1,
windows-x64-release):Isolated with a controlled A/B in an app whose sidebar is a
SingleChildScrollView+Columnof tooltipped icon buttons, the same shape this issue describes. Same machine, same steps, minutes apart:Failed to update ui::AXTreelinesIt needs an active accessibility client. With no AT attached the bridge is never created and nothing happens, which is presumably why it looks intermittent.
anhquande/anhpt#25 and yvanvds/AccountManager#357 both reference this issue with crashes rather than log spam, so this may already be affecting more than one project.
Suggested guard, if it is wanted:
Skipping looks like the correct result rather than only a safe one: this loop removes a child from its previous parent, and an orphan has none. It mirrors the
if (!child) { continue; }two lines above, and behaviour is unchanged whenever the invariant holds. #190344 removes one way of producing the malformed update, but any other route into the same tree state is still a silent process kill rather than a logged warning.Happy to open a PR for that. I would want a steer on the regression test, since driving
Unserializeto fail from insideaccessibility_bridge_unittests.ccis the part I am least sure of.mobile: open the composer overlay on demand so a hidden anchor never …
martin-robert-fink commentedon Sep 14, 2026
Minimal shape, macOS, 3.47.3: a
MenuAnchorwhosebuilderreturns aTooltiparound the anchor button.Opening the menu alone is clean. Hovering so the tooltip appears serializes the tooltip's overlay node (
traversalParent = -1, one child: the tooltip text) with no parent claiming it; the bridge rejects the update and every later one that references it. Measured with a recordingSemanticsUpdateBuilderin a widget test (deterministic, no screen reader), so this is easy to turn into a regression test.Inserting a semantics boundary between the two anchors —
Semantics(container: true, child: Tooltip(...))inside the builder — makes it clean, which matches #190344's diagnosis that the twotraversalParentIdentifiers are being merged into one node and one dropped by??=inabsorb. Until #190344 lands, that boundary is the workaround we ship.fix: keep tooltip anchors out of merged semantics nodes
fix: keep rail destination tooltips out of merged semantics nodes
Rebuild a semantics fragment when its sibling conflict changes (flutt…
fix(logging): one plain line per record, and mute the Windows AXTree …
Accessibility: no semantics node Windows' bridge has to reject
Rebuild a semantics fragment when its sibling conflict changes (flutt…
Add bot watching, light/dark mode, and request timeouts
oscar-vigo commentedon Nov 5, 2026
Additional independent reproduction on Flutter 3.47.2 stable / Windows 11 26H2, using the minimal
ListView+ twoTooltipexample from this issue.Environment
d3b14c8769, enginea804b26164, Dart 3.13.2.26300.9818.Steps to reproduce
ListViewand twoTooltipexample provided in this issue.flutter run -d windowsand repeatedly moved the pointer between A and B.Further errors appeared with node IDs 25, 29, 33, 37, 41, 45, 49 and others.
Separately, our larger Flutter Windows application, BioMusic, produces similar accessibility-tree errors in both debug and release builds. The isolated reproduction demonstrates that the issue does not require BioMusic's widgets or dependencies.
Result: Confirmed reproducible on Flutter 3.47.2 stable without Windows Narrator being enabled. The application remained running during the observed test.
TomiWebPro commentedon Nov 6, 2026
I am experiencing same issue