From d6f211011f9e705f3a9cca34160d5b5b30266cb5 Mon Sep 17 00:00:00 2001 From: Shubham Jitiya Date: Mon, 28 Oct 2024 14:48:31 +0530 Subject: [PATCH] feat: Fixes issue #413: Set max width of event slot in week & day view --- CHANGELOG.md | 1 + example/lib/widgets/day_view_widget.dart | 1 + example/lib/widgets/week_view_widget.dart | 1 + lib/src/event_arrangers/side_event_arranger.dart | 10 +++++++++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b573f981..782769e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Added `mainAxisSize`, `mainAxisAlignment`, `rightIconConfig` and `leftIconConfig`. - Adds additional configurations for `CalendarPageHeader`, `MonthPageHeader`, `DayPageHeader` and `WeekPageHeader`. - Added `titleBuilder` to build custom title for header. +- Use `maxWidth` to set max width of event slot in day & week view. [#413](https://github.com/SimformSolutionsPvtLtd/flutter_calendar_view/issues/413) - `Deprecations`: - deprecated `backgroundColor` and `iconColor` from `CalendarPageHeader`, `DayPageHeader`, `MonthPageHeader` and `WeekPageHeader`. - **Solution:** use `headerStyle` instead. diff --git a/example/lib/widgets/day_view_widget.dart b/example/lib/widgets/day_view_widget.dart index 9ec788e8..a8fe8382 100644 --- a/example/lib/widgets/day_view_widget.dart +++ b/example/lib/widgets/day_view_widget.dart @@ -22,6 +22,7 @@ class DayViewWidget extends StatelessWidget { showHalfHours: true, heightPerMinute: 3, timeLineBuilder: _timeLineBuilder, + eventArranger: SideEventArranger(maxWidth: 30), hourIndicatorSettings: HourIndicatorSettings( color: Theme.of(context).dividerColor, ), diff --git a/example/lib/widgets/week_view_widget.dart b/example/lib/widgets/week_view_widget.dart index 294ab5b1..1527bd6f 100644 --- a/example/lib/widgets/week_view_widget.dart +++ b/example/lib/widgets/week_view_widget.dart @@ -15,6 +15,7 @@ class WeekViewWidget extends StatelessWidget { key: state, width: width, showLiveTimeLineInAllDays: true, + eventArranger: SideEventArranger(maxWidth: 30), timeLineWidth: 65, liveTimeIndicatorSettings: LiveTimeIndicatorSettings( color: Colors.redAccent, diff --git a/lib/src/event_arrangers/side_event_arranger.dart b/lib/src/event_arrangers/side_event_arranger.dart index c11a725b..5c0283c9 100644 --- a/lib/src/event_arrangers/side_event_arranger.dart +++ b/lib/src/event_arrangers/side_event_arranger.dart @@ -8,6 +8,7 @@ class SideEventArranger extends EventArranger { /// This class will provide method that will arrange /// all the events side by side. const SideEventArranger({ + this.maxWidth, this.includeEdges = false, }); @@ -19,6 +20,12 @@ class SideEventArranger extends EventArranger { /// final bool includeEdges; + /// If enough space is available, the event slot will + /// use the specified max width. + /// Otherwise, it will reduce to fit all events in the cell. + /// If max width is not specified, slots will expand to fill the cell. + final double? maxWidth; + /// {@macro event_arranger_arrange_method_doc} /// /// Make sure that all the events that are passed in [events], must be in @@ -100,7 +107,8 @@ class SideEventArranger extends EventArranger { final arranged = >[]; for (final event in events) { - final slotWidth = width / event.columns; + final slotWidth = + math.min(width / event.columns, maxWidth ?? double.maxFinite); if (event.event.isNotEmpty) { // TODO(parth): Arrange events and add it in arranged.