Skip to content

iOS VoiceOver isn't able to go back to SliverAppBar from SliverSafeArea after appbar leaves screen  #143437

@jiahaog

Description

@jiahaog

Internal bug: b/323262670

Steps to reproduce

  1. Launch the app, press the + button to launch the page with the SliverAppBar.
  2. With VoiceOver on or off (doesn't matter), scroll so that the app bar is out of view.
  3. With VoiceOver enabled, scroll back through the elements and try to bring focus to the app bar back button.

After SliverAppBar is no longer visible when VoiceOver is on, VoiceOver can't bring focus to the SliverAppBar.

Expected results

Voiceover is able to go back to SliverAppBar from SliverSafeArea after app bar leaves screen.

Actual results

VoiceOver isn't able to go back to SliverAppBar from SliverSafeArea after appbar leaves screen

Code sample

Code sample
import 'package:flutter/material.dart';

void main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title, style: TextStyle(fontFamily: 'ProductSans')),
      ),
      body: Center(
        child: Text(
          'foo.',
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => secondRoute()),
          );
        },
      ),
    );
  }

  Widget secondRoute() {
    return Scaffold(
      body: Stack(children: [
        CustomScrollView(
          slivers: [
            SliverAppBar(actions: []),
            SliverToBoxAdapter(
              child: Text(' tippy'),
            ),
            SliverToBoxAdapter(
              child: Text(' second'),
            ),
            SliverToBoxAdapter(
              child: Text(' third'),
            ),
            const SliverToBoxAdapter(
              child: SizedBox(
                height: 20,
                child: Center(
                  child: Text('Scroll to see the SliverAppBar in effect.'),
                ),
              ),
            ),
            SliverSafeArea(
              sliver: SliverList(
                delegate: SliverChildBuilderDelegate(
                  (BuildContext context, int index) {
                    return Container(
                      color: index.isOdd ? Colors.white : Colors.black12,
                      height: 100.0,
                      child: Center(
                        child: Text('$index',
                            textScaler: const TextScaler.linear(5)),
                      ),
                    );
                  },
                  childCount: 20,
                ),
              ),
            ),
          ],
        ),
      ]),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
[Paste your logs here]

Flutter Doctor output

This was reproduced on Flutter Master at c65ab4d513da99419c44efa6172a978631706dec

Metadata

Metadata

Assignees

Labels

P0Critical issues such as a build break or regressiona: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)customer: money (g3)f: material designflutter/packages/flutter/material repository.f: scrollingViewports, list views, slivers, etc.found in release: 3.20Found to occur in 3.20frameworkflutter/packages/flutter repository. See also f: labels.fyi-iosFor the attention of iOS platform teamhas reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-iosiOS applications specificallyr: fixedIssue is closed as already fixed in a newer versionteam-designOwned by Design Languages teamtriaged-designTriaged by Design Languages team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions