diff --git a/lib/widgets/drink_filter_sheets.dart b/lib/widgets/drink_filter_sheets.dart index a39f23af..bdd079a6 100644 --- a/lib/widgets/drink_filter_sheets.dart +++ b/lib/widgets/drink_filter_sheets.dart @@ -188,6 +188,9 @@ class SortOptionsSheet extends StatelessWidget { child: ListTile( leading: Radio(value: sort), title: Text(sortLabel), + // Matches the CheckboxListTile rows in the category, + // style, and visibility sheets, which are all dense. + dense: true, onTap: () { provider.setSort(sort); Navigator.pop(context); diff --git a/test/widgets/drink_filter_sheets_test.dart b/test/widgets/drink_filter_sheets_test.dart index 66da9510..3b2e6e14 100644 --- a/test/widgets/drink_filter_sheets_test.dart +++ b/test/widgets/drink_filter_sheets_test.dart @@ -189,6 +189,47 @@ void main() { expect(find.text('ABV (High to Low)'), findsOneWidget); }); + testWidgets( + 'SortOptionsSheet option rows are the same height as the other ' + 'sheets (regression: #507)', + (tester) async { + await tester.pumpWidget( + directHost(SortOptionsSheet(provider: provider)), + ); + await tester.pumpAndSettle(); + + final sortTiles = tester + .widgetList(find.byType(ListTile)) + .toList(); + expect(sortTiles, isNotEmpty); + for (final tile in sortTiles) { + expect( + tile.dense, + isTrue, + reason: + 'Sort options must be dense to match the category, style, ' + 'and visibility sheets.', + ); + } + + // The user-visible symptom was row pitch, not the flag: measure the + // rendered height and compare it against a sheet that was always + // dense, so this stays honest if Material changes its metrics. + final sortRowHeight = tester + .getSize(find.widgetWithText(ListTile, 'Name (A-Z)')) + .height; + + await tester.pumpWidget(directHost(const CategoryFilterSheet())); + await tester.pumpAndSettle(); + + final categoryRowHeight = tester + .getSize(find.widgetWithText(CheckboxListTile, 'Beer (2)')) + .height; + + expect(sortRowHeight, categoryRowHeight); + }, + ); + testWidgets('StyleFilterSheet shows styles in case-insensitive order', ( tester, ) async {