-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
timetable_header.dart
80 lines (74 loc) · 2.49 KB
/
timetable_header.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import 'package:flutter/material.dart';
import 'package:time_machine/time_machine.dart';
import '../controller.dart';
import '../event.dart';
import '../theme.dart';
import '../timetable.dart';
import 'all_day_events.dart';
import 'multi_date_header.dart';
import 'week_indicator.dart';
class TimetableHeader<E extends Event> extends StatelessWidget {
const TimetableHeader({
Key key,
@required this.controller,
@required this.allDayEventBuilder,
this.onEventBackgroundTap,
this.leadingHeaderBuilder,
this.dateHeaderBuilder,
}) : assert(controller != null),
assert(allDayEventBuilder != null),
super(key: key);
final TimetableController<E> controller;
final AllDayEventBuilder<E> allDayEventBuilder;
final OnEventBackgroundTapCallback onEventBackgroundTap;
final HeaderWidgetBuilder leadingHeaderBuilder;
final HeaderWidgetBuilder dateHeaderBuilder;
@override
Widget build(BuildContext context) {
// Like [WeekYearRules.iso], but with a variable first day of week.
final weekYearRule =
WeekYearRules.forMinDaysInFirstWeek(4, controller.firstDayOfWeek);
return IntrinsicHeight(
child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
SizedBox(
width: hourColumnWidth,
child: ValueListenableBuilder<LocalDate>(
valueListenable: controller.dateListenable,
builder: (context, date, _) {
final customHeader = leadingHeaderBuilder?.call(context, date);
if (customHeader != null) {
return customHeader;
}
return Center(
child: WeekIndicator(weekYearRule.getWeekOfWeekYear(date)),
);
},
),
),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
SizedBox(
height:
context.timetableTheme?.totalDateIndicatorHeight ?? 72,
child: MultiDateHeader(
controller: controller,
builder: dateHeaderBuilder,
),
),
AllDayEvents<E>(
controller: controller,
onEventBackgroundTap: onEventBackgroundTap,
allDayEventBuilder: allDayEventBuilder,
),
],
),
),
],
),
);
}
}