Skip to content

[Accessibility] Accessibility skips or resets focus talkback in scrollable Column or ListView (Testing in Android) #173080

Closed

Description

@rod-moraes

Steps to reproduce

Create a scrollable widget (e.g., SingleChildScrollView or ListView) containing a Column.

Add multiple children (e.g., Texts, Buttons) inside the Column.

Enable TalkBack on an Android device.

Try navigating through the screen using TalkBack gestures.

Expected results

TalkBack should move focus linearly through each accessible item in order,, without skipping or looping.

Actual results

TalkBack skips some items inside the scrollable widget.

In some cases, it jumps back to the top instead of progressing.

This happens more often when nesting widgets within the Column.

Code sample

Code sample
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: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: _AnimationBackground(
          body: Semantics(
            explicitChildNodes: true,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                ...List.generate(
                  100,
                  (index) => IndexedSemantics(
                    index: index,
                    child: Container(
                      padding: const EdgeInsets.all(80),
                      color: Colors.red,
                      child: Text('teste $index'),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

class _AnimationBackground extends StatelessWidget {
  final Widget body;
  const _AnimationBackground({required this.body});

  @override
  Widget build(BuildContext context) {
    return ScrollConfiguration(
      behavior: ScrollConfiguration.of(context).copyWith(scrollbars: false),
      child: ListView(children: [body]),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
[Paste your logs here]

Flutter Doctor output

Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.32.5, on macOS 26.0 25A5316i darwin-arm64, locale pt-BR)
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 16.4)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2024.3)
[✓] Connected device (4 available)
[✓] Network resources

• No issues found!

Activity

  1. changed the title [-]Accessibility skips or resets focus talkback in scrollable Column or ListView (Testing in Android)[/-] [+][Accessibility] Accessibility skips or resets focus talkback in scrollable Column or ListView (Testing in Android)[/+] on Jul 31, 2025
  2. darshankawar commented on Aug 1, 2025

    @darshankawar
    Member

    Thanks for the report @rod-moraes
    I tried the given code sample with latest stable and master versions on Android as shown below and observed that I was able to traverse to each element properly upon scrolling up and down:

    Screen_Recording_20250801_152459.mp4

    Please check if above is correct interpretation of behavior you are reporting. If not, please provide us a short video that shows the issue.

  3. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 1, 2025
  4. rod-moraes commented on Aug 1, 2025

    @rod-moraes
    Author

    When I swipe from left to right or right to left, it’s supposed to move to the next item. But as you can see in the video, at some point the focus gets lost — I can’t select anything anymore unless I perform a specific gesture.
    However, for a blind user, this is a big problem because they lose all reference. The expected behavior is that the screen reader should continue moving to the next item without getting lost.

    trim.11ECE61E-AD4F-4153-83EA-029FCBF04771.MOV
  5. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 1, 2025
  6. darshankawar commented on Aug 4, 2025

    @darshankawar
    Member

    Thanks for the update. Now I was able to replicate the reported behavior.

    1. The focus moves to extra silent space between the elements (not the first item though) which maybe related / similar to [iOS] Extra silent accessibility focus before first ListView item #164483
    2. The accessibility focus moves to the top of the screen after last visibile item on screen.
    stable : 3.32.8
    master : 3.33.0-1.0.pre-1255
    
  7. added
    a: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)
    has reproducible stepsThe issue has been confirmed reproducible and is ready to work on
    f: scrollingViewports, list views, slivers, etc.
    frameworkflutter/packages/flutter repository. See also f: labels.
    team-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)
    and removed
    in triagePresently being triaged by the triage team
    on Aug 4, 2025
  8. 19 remaining items

  9. rod-moraes commented on Aug 25, 2025

    @rod-moraes
    Author

    @ash2moon

    Using the CustomScrollView, you can see that it depends on the spacing between the semantic items and their position on the screen. At the start of the video, you can see the issue happening, but when I scroll even slightly, it works. This happens because of the distance between the items—if the spacing were larger, the problem would occur more often.

    Additionally, the problem is that I have lists and other components on the screen that cannot be managed with a ListView.builder, since they are separate components within a single screen. The example I gave is simple so you can reproduce the issue, but in the actual project I cannot replace the components. Because of that, this problem mainly occurs where I have large spacings depending on the context (for example, at the end of a background and the start of a bottom bar).

    So I’d like to emphasize that this is not a case of “just use a ListView.builder,” because in this scenario it’s not possible to replace components. On this screen, I use a CustomScrollView with slivers, including sliver app bars, and the layout is responsive and depends on other elements.

    Screen_Recording_20250825_094800.mp4
  10. rod-moraes commented on Aug 25, 2025

    @rod-moraes
    Author

    In this other example, it’s the example of the code I sent with SingleChildScrollView.

    Screen_Recording_20250825_094441.mp4
  11. ash2moon commented on Aug 25, 2025

    @ash2moon
    Contributor

    Hi @rod-moraes, the code samples I tried were from this comment and this comment. Can you confirm that the videos you just posted are from those comments? If so, just to confirm can you list the device and flutter doctor output?

    I was able to replicate the issue from the original report, but the issue with that was due to ListView trying to render one large Column as I mentioned earlier.

  12. rod-moraes commented on Aug 26, 2025

    @rod-moraes
    Author

    Hi @ash2moon
    Yes, my tests were with the code you mentioned. If it works fine for you, try increasing the spacing of the Column. I believe it has to do with this empty space causing things to get lost.

    Adb devices: RQ8R9035DLV device 1-0 product:m62xx model:SM_M625F device:m62 transport_id:5

    Flutter Doctor:

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 3.32.5, on macOS 26.0 25A5316i darwin-arm64, locale pt-BR)
    [✓] Android toolchain - develop for Android devices (Android SDK version 35.0.1)
    [✓] Xcode - develop for iOS and macOS (Xcode 16.4)
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 2024.3)
    [✓] Connected device (4 available)
    [✓] Network resources
    
    • No issues found!
    
  13. aakashawalkar commented on Jan 27, 2026

    @aakashawalkar

    @darshankawar can you confirm this doesn't reproduce the same way with VoiceOver on iOS? That will help narrow it down.

    @jmagman Yes, it does seem to replicate on iOS as well, although the focus doesn't jump to first element or at the top unlike on Android:

    ScreenRecording_08-15-2025.11-36-04_1.MP4
    The focus isn't visible on last visible item on the screen although it does read the element properly.

    Hi @darshankawar @jmagman,
    I’m encountering this issue on mobile web — specifically on iOS browsers such as Safari and Chrome — when using Flutter version 3.38.6.

    focus_outline_disapper.mp4
  14. chunhtai commented on Jan 27, 2026

    @chunhtai
    Contributor

    can you try if you can reproduce the issue with the latest master branch, we recently pushed a pr to fix a similar issue

  15. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Jan 27, 2026
  16. aakashawalkar commented on Jan 30, 2026

    @aakashawalkar

    Hi @chunhtai, Thanks for your quick response.
    I tried to reproduce the issue using the latest master branch with a fresh flutter app, and it works as expected.
    However, I’m able to reproduce the issue in my current project with the latest master branch.

  17. github-actions commented on Feb 17, 2026

    @github-actions

    Without additional information, we are unfortunately not sure how to resolve this issue. We are therefore reluctantly going to close this bug for now.
    If you find this problem please file a new issue with the same description, what happens, logs and the output of 'flutter doctor -v'. All system setups can be slightly different so it's always better to open new issues and reference the related ones.
    Thanks for your contribution.

  18. github-actions commented on Mar 3, 2026

    @github-actions

    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 -v and a minimal reproduction of the issue.

  19. locked as resolved and limited conversation to collaborators on Mar 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)f: scrollingViewports, list views, slivers, etc.found in release: 3.32Found to occur in 3.32found in release: 3.33Found to occur in 3.33frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-androidAndroid applications specificallyteam-androidOwned by Android platform teamtriaged-androidTriaged by Android platform teamwaiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions