Implementation
List<Node> get nodes {
if (_nodes.isNotEmpty) {
return _nodes;
}
Offset initialOffset = const Offset(0, 0);
Size size = Size(slotWidth, slotHeight);
final unselectedPaint = Paint()
..style = PaintingStyle.fill
..color = selectedColor;
final selectedPaint = Paint()
..style = PaintingStyle.fill
..color = unselectedColor;
int numberOfBoxes = (24 * 60 / intervalInMinutes).round();
double currentGap = 0;
for (int i = 0; i < numberOfBoxes; i++) {
String startTime =
'${(i / (60 / intervalInMinutes)).floor()}:${(i == 0 || i * intervalInMinutes == 60) ? '00' : intervalInMinutes}';
String endTime =
'${((i + 1) / (60 / intervalInMinutes)).floor()}:${((i + 1) * intervalInMinutes == 60) ? '00' : intervalInMinutes}';
TimeRange slotTime = TimeRange(
startSeconds + (i * intervalInMinutes * 60),
startSeconds + ((i + 1) * intervalInMinutes * 60));
_nodes.add(Node(
Rect.fromLTWH(initialOffset.dx + (i * size.width) + currentGap,
initialOffset.dy, size.width, size.height),
slotTime,
startTime,
endTime,
isSelected(slotTime),
unselectedPaint,
selectedPaint));
if (displayVerticalDividers &&
(i + 1) % numberOfSlotsBeforeADivider == 0 &&
i != 0 &&
i < numberOfBoxes - 1) {
currentGap += gapToLeaveForDivider;
} else {
currentGap += gapX;
}
}
return _nodes;
}