feat(apps): refine login consent and calendar day/month UX
This commit is contained in:
@@ -36,6 +36,7 @@ class DayEventLayoutEngine {
|
||||
required DayViewScale scale,
|
||||
required double eventAreaLeft,
|
||||
required double eventAreaWidth,
|
||||
required DateTime viewDate,
|
||||
double columnGap = DayTimelineMetrics.eventColumnGap,
|
||||
}) {
|
||||
if (events.isEmpty || eventAreaWidth <= 0) {
|
||||
@@ -44,7 +45,8 @@ class DayEventLayoutEngine {
|
||||
|
||||
final sorted =
|
||||
events
|
||||
.map(_EventSpan.fromEvent)
|
||||
.map((e) => _EventSpan.fromEvent(e, viewDate))
|
||||
.expand((spans) => spans)
|
||||
.where((span) => span.endMinutes > span.startMinutes)
|
||||
.toList()
|
||||
..sort((a, b) {
|
||||
@@ -149,19 +151,73 @@ class _EventSpan {
|
||||
required this.endMinutes,
|
||||
});
|
||||
|
||||
factory _EventSpan.fromEvent(ScheduleItemModel event) {
|
||||
final start = _minutesOfDay(event.startAt);
|
||||
final end = event.endAt != null ? _minutesOfDay(event.endAt!) : start + 60;
|
||||
final clampedStart = DayTimelineMetrics.clampMinuteOfDay(start);
|
||||
var clampedEnd = DayTimelineMetrics.clampMinuteOfDay(end);
|
||||
if (clampedEnd <= clampedStart) {
|
||||
clampedEnd = DayTimelineMetrics.clampMinuteOfDay(clampedStart + 1);
|
||||
static List<_EventSpan> fromEvent(
|
||||
ScheduleItemModel event,
|
||||
DateTime viewDate,
|
||||
) {
|
||||
final startAt = event.startAt;
|
||||
final endAt = event.endAt;
|
||||
final viewDateOnly = DateTime(viewDate.year, viewDate.month, viewDate.day);
|
||||
final startDateOnly = DateTime(startAt.year, startAt.month, startAt.day);
|
||||
final endDateOnly = endAt != null
|
||||
? DateTime(endAt.year, endAt.month, endAt.day)
|
||||
: startDateOnly;
|
||||
|
||||
final startMinOfDay = _minutesOfDay(startAt);
|
||||
final endMinOfDay = endAt != null
|
||||
? _minutesOfDay(endAt)
|
||||
: startMinOfDay + 60;
|
||||
|
||||
if (endDateOnly.isAfter(startDateOnly)) {
|
||||
if (viewDateOnly.isAtSameMomentAs(startDateOnly)) {
|
||||
final clampedStart = DayTimelineMetrics.clampMinuteOfDay(startMinOfDay);
|
||||
final clampedEnd = DayTimelineMetrics.minutesInDay;
|
||||
if (clampedEnd > clampedStart) {
|
||||
return [
|
||||
_EventSpan(
|
||||
event: event,
|
||||
startMinutes: clampedStart,
|
||||
endMinutes: clampedEnd,
|
||||
),
|
||||
];
|
||||
}
|
||||
} else if (viewDateOnly.isAtSameMomentAs(endDateOnly)) {
|
||||
final clampedStart = 0;
|
||||
final clampedEnd = DayTimelineMetrics.clampMinuteOfDay(endMinOfDay);
|
||||
if (clampedEnd > clampedStart) {
|
||||
return [
|
||||
_EventSpan(
|
||||
event: event,
|
||||
startMinutes: clampedStart,
|
||||
endMinutes: clampedEnd,
|
||||
),
|
||||
];
|
||||
}
|
||||
} else if (viewDateOnly.isAfter(startDateOnly) &&
|
||||
viewDateOnly.isBefore(endDateOnly)) {
|
||||
return [
|
||||
_EventSpan(
|
||||
event: event,
|
||||
startMinutes: 0,
|
||||
endMinutes: DayTimelineMetrics.minutesInDay,
|
||||
),
|
||||
];
|
||||
}
|
||||
return const [];
|
||||
}
|
||||
return _EventSpan(
|
||||
event: event,
|
||||
startMinutes: clampedStart,
|
||||
endMinutes: clampedEnd,
|
||||
);
|
||||
|
||||
final clampedStart = DayTimelineMetrics.clampMinuteOfDay(startMinOfDay);
|
||||
var clampedEnd = DayTimelineMetrics.clampMinuteOfDay(endMinOfDay);
|
||||
if (clampedEnd <= clampedStart) {
|
||||
clampedEnd = clampedStart + 1;
|
||||
}
|
||||
return [
|
||||
_EventSpan(
|
||||
event: event,
|
||||
startMinutes: clampedStart,
|
||||
endMinutes: clampedEnd,
|
||||
),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class DayViewScale {
|
||||
static const double defaultHourHeight = 34.0;
|
||||
static const double minHourHeight = 17.0;
|
||||
static const double minHourHeight = 34.0;
|
||||
static const double maxHourHeight = 68.0;
|
||||
|
||||
final double hourHeight;
|
||||
@@ -8,7 +8,7 @@ class DayViewScale {
|
||||
const DayViewScale({required this.hourHeight});
|
||||
|
||||
factory DayViewScale.defaultScale() {
|
||||
return const DayViewScale(hourHeight: defaultHourHeight);
|
||||
return const DayViewScale(hourHeight: minHourHeight);
|
||||
}
|
||||
|
||||
DayViewScale copyWith({double? hourHeight}) {
|
||||
|
||||
Reference in New Issue
Block a user