Skip to content

[Google3 Bug]: "Control+Option+Space" doesn't work for Chrome in Flutter web when VoiceOver is enabled #173741

@zxm3ow

Description

@zxm3ow

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

  1. Run the following code in flutter using flutter engine
  2. Enable VoiceOver and navigate to the button
  3. click the button using "Control+Option+Space"

Expected results

The button is clicked when pressing "Control+Option+Space"

Actual results

The button did not finish clicking when pressing "Control+Option+Space"

Code sample

Code sample
import 'package:mobile.flutter.google_material.material3/google_material_3.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(useMaterial3: false),
      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> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title, style: TextStyle(fontFamily: 'ProductSans')),
      ),
      body: Center(
        child: Column(
          children: [
            Flexible(
              child: AnimatedOpacity(
                opacity: 1,
                duration: const Duration(milliseconds: 300),
                child: FilledButton.tonal(
                  onPressed: () {
                    _incrementCounter();
                  },
                  child: Text('Add one'),
                ),
              ),
            ),
            Text(
              'Button tapped $_counter time${_counter == 1 ? '' : 's'}.',
              key: Key('CountText'),
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

http://recall/-/eT0fzMcO4HhdNBVaawb9L8/eTDScO6BJMsbjWlNvoz3GE

Logs

Logs
errors.dart:274 Uncaught DartError: Unexpected null value.
    at Object.throw_ [as throw] (errors.dart:274:3)
    at Object.nullCheck (profile.dart:118:39)
    at [_debounce] (profile.dart:118:39)
    at dart_library.library._engine.ClickDebouncer.new.onPointerData (pointer_binding.dart:233:7)
    at dart_library.library._engine._PointerAdapter.new.tear (operations.dart:118:77)
    at pointer_binding.dart:1059:20
    at pointer_binding.dart:942:7
    at loggedHandler (pointer_binding.dart:565:9)
    at _RootZone.runUnary (zone.dart:1849:54)
    at zone.dart:1804:26
    at Object._callDartFunctionFast1 (js_allow_interop_patch.dart:224:27)
    at ret (js_allow_interop_patch.dart:84:15)

Flutter Doctor output

Doctor output
errors.dart:274 Uncaught DartError: Unexpected null value.
    at Object.throw_ [as throw] (errors.dart:274:3)
    at Object.nullCheck (profile.dart:118:39)
    at [_debounce] (profile.dart:118:39)
    at dart_library.library._engine.ClickDebouncer.new.onPointerData (pointer_binding.dart:233:7)
    at dart_library.library._engine._PointerAdapter.new.tear (operations.dart:118:77)
    at pointer_binding.dart:1059:20
    at pointer_binding.dart:942:7
    at loggedHandler (pointer_binding.dart:565:9)
    at _RootZone.runUnary (zone.dart:1849:54)
    at zone.dart:1804:26
    at Object._callDartFunctionFast1 (js_allow_interop_patch.dart:224:27)
    at ret (js_allow_interop_patch.dart:84:15)

Metadata

Metadata

Assignees

Labels

P0Critical issues such as a build break or regressiona: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)c: crashStack traces logged to the consolec: regressionIt was better in the past than it is nowcustomer: googleVarious Google teamsfound in release: 3.33Found to occur in 3.33has reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-webWeb applications specificallyr: fixedIssue is closed as already fixed in a newer versionteam-webOwned by Web platform team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions