Skip to content

[Android][a11y] TalkBack double-scrolls and skips items when the focused node scrolls into cacheExtent #194260

Closed

Description

@LouiseHsu

Steps to reproduce

  1. Run the code sample below on an Android device or emulator with TalkBack enabled.
  2. Swipe right through Item 0, Item 1, Item 2, and Item 3 (the last visible item on screen).
  3. Swipe right once more on Item 3 to trigger a scroll.

Expected results

The list scrolls once and TalkBack moves focus to Item 4.

Actual results

The list scrolls twice in a row and TalkBack jumps from Item 3 straight to Item 7, skipping Item 4, Item 5, and Item 6.

May be related to #173080

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(
      home: Scaffold(
        body: SafeArea(
          child: LayoutBuilder(
            builder: (BuildContext context, BoxConstraints constraints) {
              final double itemHeight = constraints.maxHeight * 0.25;
              return CustomScrollView(
                slivers: <Widget>[
                  SliverList.builder(
                    itemCount: 80,
                    itemBuilder: (BuildContext context, int index) {
                      return Container(
                        height: itemHeight,
                        alignment: Alignment.topLeft,
                        padding: const EdgeInsets.all(16),
                        child: Semantics(
                          container: true,
                          child: Text('Item $index'),
                        ),
                      );
                    },
                  ),
                ],
              );
            },
          ),
        ),
      ),
    );
  }
}

Screenshots or Video

Video demonstration
android.scroll.bug.mov

Activity

  1. puneetkukreja98 commented on Oct 13, 2026

    @puneetkukreja98
    Contributor

    @LouiseHsu Thanks for reporting this issue. I tested this on the latest stable and master on a physical Pixel 10 running Android 17, but was unable to reproduce the behavior. Could you please share your flutter doctor -v output along with your Android device version details?

    Video:

    screen-20261013-135300-1791879752872.mp4.2.mp4

    flutter doctor -v stable:

    [✓] Flutter (Channel stable, 3.47.7, on macOS 26.4.1 25E253 darwin-arm64, locale en-US) [553ms]
        • Flutter version 3.47.7 on channel stable at /Users/puneetkukreja/Developer/flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision abaf9c5237 (5 days ago), 2026-10-08 09:51:21 -0700
        • Engine revision deb287481e
        • Dart version 3.13.5
        • DevTools version 2.60.0
        • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use,
          enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 37.0.0-rc1) [2.2s]
        • Android SDK at /Users/puneetkukreja/Library/Android/sdk
        • Emulator version 37.1.11.0 (build_id 15917651) (CL:N/A)
        • Platform android-37.1, build-tools 37.0.0-rc1
        • Java binary at: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin/java
          This JDK is specified in your Flutter configuration.
          To change the current JDK, run: `flutter config --jdk-dir="path/to/jdk"`.
        • Java version Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 26.6) [1,233ms]
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Build 17F113
        • CocoaPods version 1.16.2
    
    [✓] Chrome - develop for the web [6ms]
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Connected device (4 available) [12.2s]    
        • Pixel 10 (mobile)                   • 61221VDCR000D5            • android-arm64  • Android 17 (API 37)
        • Puneet’s iPhone (wireless) (mobile) • 00008110-00167CEE0C46401E • ios            • iOS 18.0.1 22A3370
        • macOS (desktop)                     • macos                     • darwin-arm64   • macOS 26.4.1 25E253 darwin-arm64
        • Chrome (web)                        • chrome                    • web-javascript • Google Chrome 155.0.8059.40
    
    [✓] Network resources [891ms]
        • All expected network resources are available.
    
    • No issues found!
    

    flutter doctor -v master:

    [✓] Flutter (Channel master, 3.49.0-1.0.pre-445, on macOS 26.4.1 25E253
        darwin-arm64, locale en-US) [1,566ms]
        • Flutter version 3.49.0-1.0.pre-445 on channel master at
          /Users/puneetkukreja/flutter-contribution/flutter
        • Upstream repository https://github.com/puneetkukreja98/flutter
        • FLUTTER_GIT_URL = https://github.com/puneetkukreja98/flutter
        • Framework revision b1a73f83d9 (2 hours ago), 2026-10-13 06:07:11 +0000
        • Engine revision b1a73f83d9
        • Dart version 3.14.0 (build 3.14.0-315.1.beta)
        • DevTools version 2.61.0
        • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop,
          enable-windows-desktop, enable-android, enable-ios, cli-animations,
          enable-native-assets, enable-record-use, enable-swift-package-manager,
          omit-legacy-version-file, enable-windowing, enable-lldb-debugging,
          enable-uiscene-migration, enable-riscv64, enable-hcpp
    
    [✓] Android toolchain - develop for Android devices (Android SDK version
        37.0.0-rc1) [2.5s]
        • Android SDK at /Users/puneetkukreja/Library/Android/sdk
        • Emulator version 37.1.11.0 (build_id 15917651) (CL:N/A)
        • Platform android-37.1, build-tools 37.0.0-rc1
        • Java binary at:
          /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin/java
          This JDK is specified in your Flutter configuration.
          To change the current JDK, run: `flutter config --jdk-dir="path/to/jdk"`.
        • Java version Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 26.6) [2.7s]
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Build 17F113
        • CocoaPods version 1.16.2
    
    [✓] Chrome - develop for the web [6ms]
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Connected device (4 available) [11.6s]
        • Pixel 10 (mobile)                   • 61221VDCR000D5            •
          android-arm64  • Android 17 (API 37)
        • Puneet’s iPhone (wireless) (mobile) • 00008110-00167CEE0C46401E • ios
          • iOS 18.0.1 22A3370
        • macOS (desktop)                     • macos                     •
          darwin-arm64   • macOS 26.4.1 25E253 darwin-arm64
        • Chrome (web)                        • chrome                    •
          web-javascript • Google Chrome 155.0.8059.40
    
    [✓] Network resources [739ms]
        • All expected network resources are available.
    
    • No issues found!
    
  2. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    and removed
    in triagePresently being triaged by the triage team
    on Oct 13, 2026
  3. LouiseHsu commented on Oct 13, 2026

    @LouiseHsu
    ContributorAuthor

    this bug seems to happen exclusively when each element takes up more than 20-25% of the viewport, and my emulator was a smaller pixel 7. Ive updated the test code to be relative to device viewport. please try again!

  4. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Oct 13, 2026
  5. puneetkukreja98 commented on Oct 14, 2026

    @puneetkukreja98
    Contributor

    @LouiseHsu Thanks for updating the code sample. However, I am still unable to reproduce the issue on both master and stable.

    @saurabh-mirajkar could you please test this once on your physical pixel 7?

  6. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    and removed
    in triagePresently being triaged by the triage team
    on Oct 14, 2026
  7. saurabh-mirajkar commented on Oct 14, 2026

    @saurabh-mirajkar
    Contributor

    I'm unable to reproduce the behaviour on either a Pixel 7 emulator or a physical Pixel 6 using the supplied code sample and reproduction video with the latest stable release.

    stable
    Flutter 3.47.7 • channel stable • https://github.com/flutter/flutter.git
    Framework • revision abaf9c5237 (6 days ago) • 2026-10-08 09:51:21 -0700
    Engine • hash d8a2d6c768c334d53e16277f837970ffa1e2de81 (revision deb287481e) (6 days ago) • 2026-10-07 17:09:12.000Z
    Tools • Dart 3.13.5 • DevTools 2.60.0
    Pixel 7 Pixel 6
    emulator-pixel-7.webm
    physical-pixel-6.mp4
  8. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Oct 14, 2026
  9. LouiseHsu commented on Oct 15, 2026

    @LouiseHsu
    ContributorAuthor

    Ugh sorry one more time. I was trying to clean up the repro code, but I think just having the entire code snippet is worth it. Please try again :) I tested this on a Pixel 7.

    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(
          home: Scaffold(
            body: SafeArea(
              child: CustomScrollView(
                slivers: <Widget>[
                  SliverPersistentHeader(
                    pinned: true,
                    delegate: _PinnedHeaderDelegate(),
                  ),
                  SliverFixedExtentList.builder(
                    itemExtent: 100,
                    itemCount: 30,
                    itemBuilder: (BuildContext context, int index) {
                      return Semantics(
                        container: true,
                        child: Container(
                          alignment: Alignment.centerLeft,
                          padding: const EdgeInsets.symmetric(horizontal: 16),
                          child: Text('Item $index'),
                        ),
                      );
                    },
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    
    class _PinnedHeaderDelegate extends SliverPersistentHeaderDelegate {
      @override
      double get minExtent => 250;
    
      @override
      double get maxExtent => 250;
    
      @override
      Widget build(
        BuildContext context,
        double shrinkOffset,
        bool overlapsContent,
      ) {
        return Container(
          color: Colors.blueGrey,
          alignment: Alignment.center,
          child: const Text('Pinned Header'),
        );
      }
    
      @override
      bool shouldRebuild(_PinnedHeaderDelegate oldDelegate) => false;
    }
    
    
  10. 2 remaining items

  11. added
    a: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)
    team-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)
    fyi-androidFor the attention of Android platform team
    and removed
    in triagePresently being triaged by the triage team
    on Oct 15, 2026
  12. mboetger commented on Oct 20, 2026

    @mboetger
    Contributor

    Assigning to @LouiseHsu since #194411 has been posted.

  13. added
    P2Important issues not at the top of the work list
    on Oct 20, 2026
  14. github-actions commented on Nov 10, 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.

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

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)team-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions