Skip to content

DateTimePicker date buttons fail touch target size accessibility checks #158325

Closed
@math1man

Description

@math1man

Steps to reproduce

Internal bug b/377876657
and
internal bug b/412307873

  1. Write some UI that invokes showDatePicker
  2. Use an accessibility checker on the resulting UI, such as
    await expectLater(
      tester,
      meetsGuideline(androidTapTargetGuideline),
    );

Expected results

All user-interactable elements should have a minimum touch target size of at least 48dp x 48dp, as described at https://support.google.com/accessibility/android/answer/7101858.

Actual results

The size of the individual day buttons is less than 48x48

Code sample

Code sample

App code:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.light(useMaterial3: true),
      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)),
      body: Center(child: Text('Body')),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          showDatePicker(
            context: context,
            initialDate: DateTime.now(),
            firstDate: DateTime(2024),
            lastDate: DateTime(2026),
          );
        },
        tooltip: 'Increment',
      ),
    );
  }
}

Test code:

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
// Import for file above
import 'package:hello_flutter.app/main.dart';

void main() {
  testWidgets('test', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());

    final button = find.byType(FloatingActionButton);

    await tester.tap(button);

    await tester.pumpAndSettle();

    expect(find.byType(DatePickerDialog), findsOneWidget);
    await expectLater(
      tester,
      meetsGuideline(androidTapTargetGuideline),
    );
  });
}

Screenshots or Video

Screenshots / Video demonstration: N/A

Logs

Logs: N/A

Flutter Doctor output

Doctor output

N/A, Google internal client

Metadata

Metadata

Assignees

Labels

P1High-priority issues at the top of the work lista: accessibilityAccessibility, e.g. VoiceOver or TalkBack. (aka a11y)customer: chalk (g3)customer: huggsy (g3)f: date/time pickerDate or time picker widgetsf: material designflutter/packages/flutter/material repository.found in release: 3.27Found to occur in 3.27frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onteam-accessibilityOwned by Framework Accessibility team (i.e. responsible for accessibility code in flutter/flutter)triaged-accessibilityTriaged by Framework Accessibility team

Type

No type

Projects

Status

Done (PR merged)

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions