summaryrefslogtreecommitdiff
path: root/lib/pages/agenda_page.dart
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-08-16 11:19:49 +0200
committerAldrik Ramaekers <aldrik@amftech.nl>2022-08-16 11:19:49 +0200
commit00bf8823311c067f5b0e9a785a5048e6bd8ad122 (patch)
treeba2d727345038b7da2ea628e5e865572033df8e7 /lib/pages/agenda_page.dart
ok
Diffstat (limited to 'lib/pages/agenda_page.dart')
-rw-r--r--lib/pages/agenda_page.dart118
1 files changed, 118 insertions, 0 deletions
diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart
new file mode 100644
index 0000000..55c7360
--- /dev/null
+++ b/lib/pages/agenda_page.dart
@@ -0,0 +1,118 @@
+import 'package:carousel_slider/carousel_slider.dart';
+import 'package:flutter/material.dart';
+import 'package:in_date_utils/in_date_utils.dart' as DateUtilities;
+import 'package:training_planner/pages/add_shift_page.dart';
+import 'package:training_planner/shift.dart';
+import 'package:training_planner/style/style.dart';
+import 'package:training_planner/utils/date.dart';
+import 'package:training_planner/widgets/agenda_week.dart';
+import 'package:flutter_local_notifications/flutter_local_notifications.dart';
+
+class AgendaPage extends StatefulWidget {
+ @override
+ _AgendaPageState createState() => _AgendaPageState();
+
+ const AgendaPage({Key? key}) : super(key: key);
+}
+
+class _AgendaPageState extends State<AgendaPage> {
+ int weekToStartAt = 0;
+ List<Widget> weeks = [];
+ List<int> weekNrs = [];
+ List<DateTime> dateTimes = [];
+ int currentSelectedPageIndex = 0;
+ int currentSelectedPageNr = 0;
+ DateTime currentSelectedWeek = DateTime.now();
+
+ @override
+ initState() {
+ super.initState();
+
+ weeks = getWeeks();
+
+ currentSelectedPageIndex = weekToStartAt;
+ currentSelectedPageNr = weekNrs[weekToStartAt];
+ }
+
+ List<Widget> getWeeks() {
+ List<Widget> result = [];
+ List<int> weekNrs = [];
+ DateTime startDate =
+ DateUtilities.DateUtils.firstDayOfWeek(DateTime(2020, 1, 1));
+ DateTime today = DateTime.now();
+ DateTime firstDayOfCurrentWeek =
+ DateUtilities.DateUtils.firstDayOfWeek(today);
+ int difference = today.difference(startDate).inDays;
+
+ int totalWeeks = (difference / 7.0).ceil() + 4;
+
+ for (int i = 0; i < totalWeeks; i++) {
+ DateTime mondayOfWeek = startDate.add(Duration(days: 7 * i));
+ int weekNr = DateUtilities.DateUtils.getWeekNumber(mondayOfWeek);
+
+ bool isCurrentWeek = false;
+ if (mondayOfWeek == firstDayOfCurrentWeek) {
+ weekToStartAt = i;
+ isCurrentWeek = true;
+ }
+
+ result.add(
+ AgendaWeek(
+ weekNr: weekNr,
+ mondayOfWeek: mondayOfWeek,
+ isCurrentWeek: isCurrentWeek,
+ ),
+ );
+ weekNrs.add(weekNr);
+ dateTimes.add(mondayOfWeek);
+ }
+ this.weekNrs = weekNrs;
+
+ return result;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Padding(
+ padding: const EdgeInsets.all(0),
+ child: CarouselSlider(
+ options: CarouselOptions(
+ onPageChanged: (index, _) {
+ currentSelectedPageIndex = index;
+ currentSelectedPageNr = weekNrs[index];
+ currentSelectedWeek = dateTimes[index];
+ },
+ height: MediaQuery.of(context).size.height - 163,
+ viewportFraction: 1.0,
+ enlargeCenterPage: false,
+ enableInfiniteScroll: false,
+ initialPage: weekToStartAt, // Week nr
+ ),
+ items: getWeeks(),
+ ),
+ ),
+ floatingActionButton: FloatingActionButton(
+ onPressed: () {
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => AddShiftPage(
+ pageNr: currentSelectedPageNr,
+ pageIndex: currentSelectedPageIndex,
+ mondayOfWeek: currentSelectedWeek,
+ )),
+ ).then((val) => {
+ setState(() {
+ weeks = getWeeks();
+ currentSelectedPageIndex = weekToStartAt;
+ currentSelectedPageNr = weekNrs[weekToStartAt];
+ })
+ });
+ },
+ backgroundColor: Style.titleColor,
+ child: const Icon(Icons.add),
+ ),
+ );
+ }
+}