From 5153792f91fd4408907cbaaf4373efb5f50cae1b Mon Sep 17 00:00:00 2001 From: Marcel Ploch Date: Tue, 26 Mar 2024 13:57:45 +0100 Subject: [PATCH] adding fix for names --- lib/src/utils.dart | 7 +++-- lib/src/widgets/date_range_picker.dart | 13 ++++++++- test/widgets_test.dart | 38 ++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/lib/src/utils.dart b/lib/src/utils.dart index 6ddd58e..770a886 100644 --- a/lib/src/utils.dart +++ b/lib/src/utils.dart @@ -1,8 +1,11 @@ import 'package:intl/intl.dart'; /// Returns the default week days as strings (using intl). -List defaultWeekDays() => - DateFormat.E().dateSymbols.WEEKDAYS.map((e) => e.substring(0, 3)).toList(); +List defaultWeekDays({int lengthOfDateNames = 3}) => DateFormat.E() + .dateSymbols + .WEEKDAYS + .map((e) => e.substring(0, lengthOfDateNames)) + .toList(); extension ListUtils on List { /// Shifts the list by "amount" places diff --git a/lib/src/widgets/date_range_picker.dart b/lib/src/widgets/date_range_picker.dart index 3d7b2a5..17b661c 100644 --- a/lib/src/widgets/date_range_picker.dart +++ b/lib/src/widgets/date_range_picker.dart @@ -77,8 +77,11 @@ class DayNamesRow extends StatelessWidget { Key? key, required this.textStyle, List? weekDays, + int lengthOfDateName = 3, int firstDayOfWeek = 0, - }) : weekDays = (weekDays ?? defaultWeekDays()).shiftBy(firstDayOfWeek), + }) : weekDays = + (weekDays ?? defaultWeekDays(lengthOfDateNames: lengthOfDateName)) + .shiftBy(firstDayOfWeek), super(key: key); final TextStyle textStyle; @@ -142,12 +145,15 @@ class DateRangePickerWidget extends StatefulWidget { this.separatorThickness = 1, this.allowSingleTapDaySelection = false, this.firstDayOfWeek = 0, + this.lengthOfDateName = 3, }) : assert( firstDayOfWeek >= 0 && firstDayOfWeek <= 6, 'firstDayOfWeek must be in the range [0..6].', ), super(key: key); + final int lengthOfDateName; + /// Called whenever the selected date range is changed. final ValueChanged onDateRangeChanged; @@ -267,6 +273,7 @@ class DateRangePickerWidgetState extends State { delta: calendarController .retrieveDeltaForMonth(widget.firstDayOfWeek), firstDayOfWeek: widget.firstDayOfWeek, + lengthOfDateName: widget.lengthOfDateName, ), if (widget.doubleMonth) ...{ if (widget.displayMonthsSeparator) @@ -338,11 +345,14 @@ class EnrichedMonthWrapWidget extends StatelessWidget { required this.days, required this.delta, this.firstDayOfWeek = 0, + this.lengthOfDateName = 3, }) : super(key: key); /// The theme to use for the calendar. final CalendarTheme theme; + final int lengthOfDateName; + /// A callback that is called when the selected date changes. final ValueChanged onDateChanged; @@ -364,6 +374,7 @@ class EnrichedMonthWrapWidget extends StatelessWidget { DayNamesRow( textStyle: theme.dayNameTextStyle, firstDayOfWeek: firstDayOfWeek, + lengthOfDateName: lengthOfDateName, ), const SizedBox(height: 16), MonthWrapWidget( diff --git a/test/widgets_test.dart b/test/widgets_test.dart index 7474093..02ae44d 100644 --- a/test/widgets_test.dart +++ b/test/widgets_test.dart @@ -19,7 +19,8 @@ void main() { }); group('DateRangePickerWidget', () { - testWidgets('renders correctly and initializes with initial dateRange', + testWidgets( + 'renders correctly and initializes with initial dateRange render 2 letters names', (WidgetTester tester) async { final initialDateRange = DateRange(DateTime(2023, 1, 1), DateTime(2023, 1, 5)); @@ -29,12 +30,13 @@ void main() { await tester.pumpWidget(MaterialApp( home: Scaffold( body: SizedBox( - height: 334, + height: 340, child: DateRangePickerWidget( initialDateRange: initialDateRange, minDate: minDate, maxDate: maxDate, onDateRangeChanged: (DateRange? dateRange) {}, + lengthOfDateName: 2, ), ), ), @@ -43,6 +45,38 @@ void main() { expect(find.byType(DateRangePickerWidget), findsOneWidget); expect(find.byType(MonthSelectorAndDoubleIndicator), findsOneWidget); expect(find.byType(DayNamesRow), findsNWidgets(2)); + expect(find.text('Mo'), findsOneWidget); + expect(find.byType(MonthWrapWidget), findsNWidgets(2)); + expect(find.byType(DayTileWidget), findsWidgets); + }); + + testWidgets( + 'renders correctly and initializes with initial dateRange 3 length names', + (WidgetTester tester) async { + final initialDateRange = + DateRange(DateTime(2023, 1, 1), DateTime(2023, 1, 5)); + final minDate = DateTime(2022, 1, 1); + final maxDate = DateTime(2023, 12, 31); + + await tester.pumpWidget(MaterialApp( + home: Scaffold( + body: SizedBox( + height: 340, + child: DateRangePickerWidget( + initialDateRange: initialDateRange, + minDate: minDate, + maxDate: maxDate, + onDateRangeChanged: (DateRange? dateRange) {}, + lengthOfDateName: 3, + ), + ), + ), + )); + + expect(find.byType(DateRangePickerWidget), findsOneWidget); + expect(find.byType(MonthSelectorAndDoubleIndicator), findsOneWidget); + expect(find.byType(DayNamesRow), findsNWidgets(2)); + expect(find.text('Mon'), findsExactly(2)); expect(find.byType(MonthWrapWidget), findsNWidgets(2)); expect(find.byType(DayTileWidget), findsWidgets); });