Repository navigation
Closed
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)Accessibility, e.g. VoiceOver or TalkBack. (aka a11y)c: regressionIt was better in the past than it is nowIt was better in the past than it is nowfound in release: 3.47Found to occur in 3.47Found to occur in 3.47frameworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.team-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)Owned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)triaged-accessibilityTriaged by Framework Accessibility teamTriaged by Framework Accessibility team
Description
Found while migrating Forui from 3.44+ to 3.47. It surfaced as roughly 200 failing widget tests across every widget that puts a text field inside a merged subtree.
Edit:
This seems to be quite a bad regression since simply passing a prefix to material's TextField, then tapping it is also enough to trigger the assertion.
Steps to reproduce
Run the widget test in the code sample below.
- a
MergeSemanticsancestor - a descendant whose
SemanticsConfiguration.childConfigurationsDelegateproduces a sibling merge
group.InputDecoratorhas one. It routes through_AffixText, which sits under anAnimatedOpacity.
Expected results
No assertion. The sibling node is merged into the enclosing merge root.
Actual results
'package:flutter/src/semantics/semantics.dart': Failed assertion: line 3862 pos 16:
'node.isMergedIntoParent': is not true.
Code sample
Code sample
import 'package:material_ui/material_ui.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('MergeSemantics + sibling merge group', (tester) async {
final focus = FocusNode();
addTearDown(focus.dispose);
await tester.pumpWidget(
MaterialApp(
home: Material(
child: MergeSemantics(
child: TextField(
focusNode: focus,
decoration: const InputDecoration(prefix: SizedBox(width: 12)),
),
),
),
),
);
focus.requestFocus();
await tester.pumpAndSettle();
expect(tester.takeException(), isNull);
});
}Potential fix
The sibling node needs to account for the merge it is about to be placed inside, not only the one
imposed from above:
--- a/packages/flutter/lib/src/rendering/object.dart
+++ b/packages/flutter/lib/src/rendering/object.dart
@@ class _RenderObjectSemantics extends _SemanticsFragment with DiagnosticableTreeM
- node.isMergedIntoParent = parentData?.mergeIntoParent ?? false;
+ node.isMergedIntoParent =
+ configProvider.effective.isMergingSemanticsOfDescendants ||
+ (parentData?.mergeIntoParent ?? false);Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.47.0, on macOS 26.6.1 25G76 darwin-arm64, locale en-SG)
[✓] Android toolchain - develop for Android devices (Android SDK version 36.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 26.6)
[✓] Chrome - develop for the web
[✓] Connected device (3 available)
[✓] Network resources
• No issues found!
Reacted by Social Jawn, chris-rutkowski, Joe Kawai, Matthias Ngeo, Hugo Delaunay and Lukáš Novák
Metadata
Metadata
Assignees
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)Accessibility, e.g. VoiceOver or TalkBack. (aka a11y)c: regressionIt was better in the past than it is nowIt was better in the past than it is nowfound in release: 3.47Found to occur in 3.47Found to occur in 3.47frameworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.team-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)Owned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)triaged-accessibilityTriaged by Framework Accessibility teamTriaged by Framework Accessibility team
Activity
suryaKommana2662 commentedon Aug 14, 2026
@Pante Thanks for the report an issue. I able to reproduce the issue locally using the provided minimal test case. The test passes on Flutter 3.44.8, but the issue is reproducible on Flutter 3.47.0, where it fails with the same assertion:
This appears to be a regression between Flutter 3.44.8 and 3.47.0. Routing to the team-accessibility for further investigation.
Pante commentedon Aug 20, 2026
Hi @chunhtai, thanks for triaging this!
May I know if there's a rough timeline for a fix? No pressure for an exact date/timeline, asking because this currently blocks Forui's migration to 3.47. Knowing roughly when this might land (and whether it could be a candidate for a cherry-pick into a hotfix release, given it's a regression) will really help us decide how to handle this on our side. Thanks again!
chunhtai commentedon Aug 21, 2026
soon
docs(STEP-43): correct phantom close with real verification evidence
docs: refresh roadmaps to match current delivery state
Fix sibling nodes crash under MergeSemantics (flutter#191587)
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.