Repository navigation
Open
Labels
P1High-priority issues at the top of the work listHigh-priority issues at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)Accessibility, e.g. VoiceOver or TalkBack. (aka a11y)browser: chrome-androidonly manifests in Chrome on Androidonly manifests in Chrome on Androidcustomer: googleVarious Google teamsVarious Google teamscustomer: huggsy (g3)found in release: 3.35Found to occur in 3.35Found to occur in 3.35found in release: 3.36Found to occur in 3.36Found to occur in 3.36has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: material_uimaterial_ui package in flutter/packagesmaterial_ui package in flutter/packagesplatform-webWeb applications specificallyWeb applications specificallyteam-webOwned by Web platform teamOwned by Web platform teamtriaged-webTriaged by Web platform teamTriaged by Web platform team
Description
Help us understand the severity of this issue
- causing severe production issues e.g. malfunctions or data loss
- blocking next binary release
- blocking a client feature launch within a quarter
- nice-to-have but does not block a launch within the next quarter
Steps to reproduce
- Create a flutter web app that creates a focusable inline link, using
RichText. Our app uses https://pub.dev/packages/tagged_text for this, but the minimal repro below uses an even simpler implementation derived from it. - Open the web app on an Android device in Chrome
- Enable Android TalkBack
- Enable Flutter accessibility
- Observe how Talkback interacts with the app
Steps 1-2 can also be achieved by opening https://dartpad.dev/?id=0239957b1f8428166a22f1565932b6f0&channel=main in Chrome on an Android device and running the dartpad.
Expected results
The non-link portion of the RichText should be focusable using talkback.
Actual results
Only the link is focusable.
Code sample
Code sample
Also available at https://gist.github.com/math1man/0239957b1f8428166a22f1565932b6f0 and https://dartpad.dev/?id=0239957b1f8428166a22f1565932b6f0&channel=main
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(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: ListView(
children: [
Text('Start'),
Builder(
builder: (context) => RichText(
text: TextSpan(
children: [
TextSpan(text: 'Hello, World! '),
WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: _Link(
text: 'Link',
onTap: () {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('Clicked')));
},
),
),
],
),
),
),
Text('End'),
],
),
),
);
}
}
class _Link extends StatelessWidget {
const _Link({required this.text, this.onTap});
final String text;
final GestureTapCallback? onTap;
@override
Widget build(BuildContext context) {
final colors = Theme.of(context).colorScheme;
return Semantics(
link: true,
linkUrl: Uri.parse('#'),
container: true,
onTap: onTap,
child: GestureDetector(
onTap: onTap,
child: Text(
text,
style: TextStyle(
color: colors.primary,
decoration: TextDecoration.underline,
decorationColor: colors.primary,
),
),
),
);
}
}Screenshots or Video
Screenshots / Video demonstration
screen-20250829-120845.mp4
Logs
Logs: N/A
Flutter Doctor output
Doctor output: N/A
Reacted by Mike Chavoustie
Metadata
Metadata
Assignees
Labels
P1High-priority issues at the top of the work listHigh-priority issues at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)Accessibility, e.g. VoiceOver or TalkBack. (aka a11y)browser: chrome-androidonly manifests in Chrome on Androidonly manifests in Chrome on Androidcustomer: googleVarious Google teamsVarious Google teamscustomer: huggsy (g3)found in release: 3.35Found to occur in 3.35Found to occur in 3.35found in release: 3.36Found to occur in 3.36Found to occur in 3.36has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: material_uimaterial_ui package in flutter/packagesmaterial_ui package in flutter/packagesplatform-webWeb applications specificallyWeb applications specificallyteam-webOwned by Web platform teamOwned by Web platform teamtriaged-webTriaged by Web platform teamTriaged by Web platform team
Type
Projects
- StatusShow more project fieldsNo status
Activity
math1man commentedon Aug 29, 2025
Internal bug b/440396024. Client:
huggsymath1man commentedon Aug 29, 2025
Some added context: we do have a regular Android app where things work normally, but we also have a high-usage surface where our web app is accessed via an Android WebView, and that use case suffers from this bug same as running in Chrome.
tirth-patel-nc commentedon Sep 1, 2025
@math1man thanks for the report. I’m seeing the same behavior with the latest SDK versions on web using mobile chrome (pixel 6a). However it doesn't replicate on Deskop-Web (Chrome) with Voice-Over in Mac.
#129033 might be related.
25 remaining items
mdebbar commentedon Feb 27, 2026
We are generating the following on the web:
which looks fine and works fine with VoiceOver on my Mac.
I'll see if I can try this on an Android device to test TalkBack behavior. The only thing that comes to mind is maybe TalkBack doesn't handle
aria-labelcombined with children for some reason.flutter-triage-bot commentedon Jul 8, 2026
This issue is assigned to @flutter-zl but has had no recent status updates. Please consider unassigning this issue if it is not going to be addressed in the near future. This allows people to have a clearer picture of what work is actually planned. Thanks!