From 00bf8823311c067f5b0e9a785a5048e6bd8ad122 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Tue, 16 Aug 2022 11:19:49 +0200 Subject: ok --- lib/pages/agenda_page.dart | 118 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 lib/pages/agenda_page.dart (limited to 'lib/pages/agenda_page.dart') 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 { + int weekToStartAt = 0; + List weeks = []; + List weekNrs = []; + List dateTimes = []; + int currentSelectedPageIndex = 0; + int currentSelectedPageNr = 0; + DateTime currentSelectedWeek = DateTime.now(); + + @override + initState() { + super.initState(); + + weeks = getWeeks(); + + currentSelectedPageIndex = weekToStartAt; + currentSelectedPageNr = weekNrs[weekToStartAt]; + } + + List getWeeks() { + List result = []; + List 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), + ), + ); + } +} -- cgit v1.2.3-70-g09d2