Skip to content

Commit

Permalink
Handle long press (aleksanderwozniak#102)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 authored and aleksanderwozniak committed Nov 3, 2019
1 parent dd2124e commit d41fd7b
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
30 changes: 24 additions & 6 deletions lib/src/calendar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ class TableCalendar extends StatefulWidget {
/// Called whenever any day gets tapped.
final OnDaySelected onDaySelected;

/// Called whenever any day gets long pressed.
final OnDaySelected onDayLongPressed;

/// Called whenever any unavailable day gets tapped.
/// Replaces `onDaySelected` for those days.
final VoidCallback onUnavailableDaySelected;
Expand Down Expand Up @@ -132,14 +135,18 @@ class TableCalendar extends StatefulWidget {
/// Set of Builders for `TableCalendar` to work with.
final CalendarBuilders builders;

final VoidCallback onUnavailableDayLongPressed;

TableCalendar({
Key key,
@required this.calendarController,
this.locale,
this.events = const {},
this.holidays = const {},
this.onDaySelected,
this.onDayLongPressed,
this.onUnavailableDaySelected,
this.onUnavailableDayLongPressed,
this.onVisibleDaysChanged,
this.initialSelectedDay,
this.startDay,
Expand Down Expand Up @@ -235,6 +242,13 @@ class _TableCalendarState extends State<TableCalendar> with SingleTickerProvider
});
}

void _onDayLongPressed(DateTime day) {
if (widget.onDayLongPressed != null) {
final key = widget.calendarController.visibleEvents.keys.firstWhere((it) => Utils.isSameDay(it, day), orElse: () => null);
widget.onDayLongPressed(day, widget.calendarController.visibleEvents[key] ?? []);
}
}

void _toggleCalendarFormat() {
setState(() {
widget.calendarController.toggleCalendarFormat();
Expand All @@ -257,9 +271,14 @@ class _TableCalendarState extends State<TableCalendar> with SingleTickerProvider
}
}

void _onUnavailableDayLongPressed() {
if (widget.onUnavailableDayLongPressed != null) {
widget.onUnavailableDayLongPressed();
}
}

bool _isDayUnavailable(DateTime day) {
return (widget.startDay != null && day.isBefore(widget.startDay)) ||
(widget.endDay != null && day.isAfter(widget.endDay));
return (widget.startDay != null && day.isBefore(widget.startDay)) || (widget.endDay != null && day.isAfter(widget.endDay));
}

DateTime _getEventKey(DateTime day) {
Expand Down Expand Up @@ -423,8 +442,7 @@ class _TableCalendarState extends State<TableCalendar> with SingleTickerProvider
switchInCurve: Curves.decelerate,
transitionBuilder: (child, animation) {
return SlideTransition(
position:
Tween<Offset>(begin: Offset(widget.calendarController._dx, 0), end: Offset(0, 0)).animate(animation),
position: Tween<Offset>(begin: Offset(widget.calendarController._dx, 0), end: Offset(0, 0)).animate(animation),
child: child,
);
},
Expand Down Expand Up @@ -558,6 +576,7 @@ class _TableCalendarState extends State<TableCalendar> with SingleTickerProvider
return GestureDetector(
behavior: widget.dayHitTestBehavior,
onTap: () => _isDayUnavailable(date) ? _onUnavailableDaySelected() : _selectDay(date),
onLongPress: () => _isDayUnavailable(date) ? _onUnavailableDayLongPressed() : _onDayLongPressed(date),
child: content,
);
}
Expand All @@ -577,8 +596,7 @@ class _TableCalendarState extends State<TableCalendar> with SingleTickerProvider
final isToday = widget.builders.todayDayBuilder != null && tIsToday;
final isOutsideHoliday = widget.builders.outsideHolidayDayBuilder != null && tIsOutside && tIsHoliday;
final isHoliday = widget.builders.holidayDayBuilder != null && !tIsOutside && tIsHoliday;
final isOutsideWeekend =
widget.builders.outsideWeekendDayBuilder != null && tIsOutside && tIsWeekend && !tIsHoliday;
final isOutsideWeekend = widget.builders.outsideWeekendDayBuilder != null && tIsOutside && tIsWeekend && !tIsHoliday;
final isOutside = widget.builders.outsideDayBuilder != null && tIsOutside && !tIsWeekend && !tIsHoliday;
final isWeekend = widget.builders.weekendDayBuilder != null && !tIsOutside && tIsWeekend && !tIsHoliday;

Expand Down
8 changes: 3 additions & 5 deletions lib/src/calendar_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -231,9 +231,8 @@ class CalendarController {
return formats[id];
}

String _getFormatButtonText() => _useNextCalendarFormat
? _availableCalendarFormats[_nextFormat()]
: _availableCalendarFormats[_calendarFormat.value];
String _getFormatButtonText() =>
_useNextCalendarFormat ? _availableCalendarFormats[_nextFormat()] : _availableCalendarFormats[_calendarFormat.value];

void _selectPrevious() {
if (calendarFormat == CalendarFormat.month) {
Expand Down Expand Up @@ -386,8 +385,7 @@ class CalendarController {
}

DateTime _lastDayOfMonth(DateTime month) {
final date =
month.month < 12 ? DateTime.utc(month.year, month.month + 1, 1, 12) : DateTime.utc(month.year + 1, 1, 1, 12);
final date = month.month < 12 ? DateTime.utc(month.year, month.month + 1, 1, 12) : DateTime.utc(month.year + 1, 1, 1, 12);
return date.subtract(const Duration(days: 1));
}

Expand Down

0 comments on commit d41fd7b

Please sign in to comment.