diff --git a/packages/flutter/lib/src/material/date_picker.dart b/packages/flutter/lib/src/material/date_picker.dart index 4e7a7bae2e4..a6056c9c099 100644 --- a/packages/flutter/lib/src/material/date_picker.dart +++ b/packages/flutter/lib/src/material/date_picker.dart @@ -2395,8 +2395,10 @@ class _MonthItemGridDelegate extends SliverGridDelegate { @override SliverGridLayout getLayout(SliverConstraints constraints) { - final double tileWidth = - (constraints.crossAxisExtent - 2 * _horizontalPadding) / DateTime.daysPerWeek; + final double tileWidth = math.max( + (constraints.crossAxisExtent - 2 * _horizontalPadding) / DateTime.daysPerWeek, + 0.0, + ); return _MonthSliverGridLayout( crossAxisCount: DateTime.daysPerWeek + 2, dayChildWidth: tileWidth, diff --git a/packages/flutter/test/material/date_range_picker_test.dart b/packages/flutter/test/material/date_range_picker_test.dart index aba6da11aa8..b3138d3ae05 100644 --- a/packages/flutter/test/material/date_range_picker_test.dart +++ b/packages/flutter/test/material/date_range_picker_test.dart @@ -1967,6 +1967,19 @@ void main() { expect(getDayCount(secondMonthItem), 21); }); }); + + testWidgets('DateRangePickerDialog does not crash at zero area', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Center( + child: SizedBox.shrink( + child: DateRangePickerDialog(firstDate: firstDate, lastDate: lastDate), + ), + ), + ), + ); + expect(tester.getSize(find.byType(DateRangePickerDialog)), Size.zero); + }); } class _RestorableDateRangePickerDialogTestWidget extends StatefulWidget {