summaryrefslogtreecommitdiff
path: root/lib/pages
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pages')
-rw-r--r--lib/pages/add_shift_page.dart156
-rw-r--r--lib/pages/agenda_page.dart243
-rw-r--r--lib/pages/logbook_page.dart1
3 files changed, 181 insertions, 219 deletions
diff --git a/lib/pages/add_shift_page.dart b/lib/pages/add_shift_page.dart
deleted file mode 100644
index 21bdbf0..0000000
--- a/lib/pages/add_shift_page.dart
+++ /dev/null
@@ -1,156 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:training_planner/pages/agenda_page.dart';
-import 'package:training_planner/pages/home_page.dart';
-import 'package:training_planner/shift.dart';
-import 'package:training_planner/main.dart';
-import 'package:training_planner/style/style.dart';
-
-class AddShiftPage extends StatefulWidget {
- final int pageNr;
- final int pageIndex;
- final DateTime mondayOfWeek;
- final Function updateParent;
-
- @override
- _AddShiftPageState createState() => _AddShiftPageState();
-
- const AddShiftPage({
- Key? key,
- required this.pageNr,
- required this.pageIndex,
- required this.mondayOfWeek,
- required this.updateParent,
- }) : super(key: key);
-}
-
-class _AddShiftPageState extends State<AddShiftPage> {
- @override
- initState() {
- super.initState();
- }
-
- String dropdownValue = 'Maandag';
- List<bool> isSelected = [false, true, false];
-
- Future<void> addShift() async {
- DateTime startDate = widget.mondayOfWeek;
- switch (dropdownValue) {
- case 'Maandag':
- startDate = startDate.add(Duration(days: 0));
- break;
- case 'Dinsdag':
- startDate = startDate.add(Duration(days: 1));
- break;
- case 'Woensdag':
- startDate = startDate.add(Duration(days: 2));
- break;
- case 'Donderdag':
- startDate = startDate.add(Duration(days: 3));
- break;
- case 'Vrijdag':
- startDate = startDate.add(Duration(days: 4));
- break;
- case 'Zaterdag':
- startDate = startDate.add(Duration(days: 5));
- break;
- case 'Zondag':
- startDate = startDate.add(Duration(days: 6));
- break;
- }
-
- ShiftType type = ShiftType.Dagrit;
- if (isSelected[1]) type = ShiftType.Avondrit;
- if (isSelected[2]) type = ShiftType.Terugscannen;
-
- switch (type) {
- case ShiftType.Dagrit:
- startDate = startDate.add(Duration(hours: 10));
- break;
- case ShiftType.Avondrit:
- startDate = startDate.add(Duration(
- hours: startDate.weekday == 6 ? 15 : 17,
- minutes: startDate.weekday == 6 ? 30 : 0));
- break;
- case ShiftType.Terugscannen:
- startDate = startDate.add(
- Duration(hours: startDate.weekday == 6 ? 13 : 14, minutes: 30));
- break;
- }
-
- await shiftProvider.addShift(Shift(start: startDate, type: type));
- widget.updateParent();
- Navigator.pop(context);
- }
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- title: Text('Toevoegen aan planning #' + widget.pageNr.toString()),
- backgroundColor: Style.background,
- foregroundColor: Style.titleColor,
- ),
- body: Center(
- child: Column(
- children: [
- Padding(padding: const EdgeInsets.all(20)),
- Container(
- width: 200,
- child: DropdownButton<String>(
- value: dropdownValue,
- icon: const Icon(Icons.arrow_downward),
- elevation: 16,
- style: const TextStyle(color: Colors.black),
- underline: Container(
- height: 2,
- color: Colors.black,
- ),
- onChanged: (String? newValue) {
- setState(() {
- dropdownValue = newValue!;
- });
- },
- items: <String>[
- 'Maandag',
- 'Dinsdag',
- 'Woensdag',
- 'Donderdag',
- 'Vrijdag',
- 'Zaterdag',
- 'Zondag'
- ].map<DropdownMenuItem<String>>((String value) {
- return DropdownMenuItem<String>(
- value: value,
- child: Text(value),
- );
- }).toList(),
- ),
- ),
- Padding(padding: const EdgeInsets.all(20)),
- ToggleButtons(
- children: <Widget>[
- Padding(
- padding: const EdgeInsets.all(15), child: Text('Dagrit')),
- Padding(
- padding: const EdgeInsets.all(15), child: Text('Avondrit')),
- Padding(
- padding: const EdgeInsets.all(15),
- child: Text('Terugscan')),
- ],
- onPressed: (int index) {
- setState(() {
- isSelected[index] = !isSelected[index];
- });
- },
- isSelected: isSelected,
- ),
- Padding(
- padding: const EdgeInsets.all(20),
- ),
- TextButton(
- onPressed: () async => {await addShift()},
- child: Text('Toevoegen')),
- ],
- )));
- }
-}
diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart
index f052434..eca39fe 100644
--- a/lib/pages/agenda_page.dart
+++ b/lib/pages/agenda_page.dart
@@ -2,12 +2,10 @@ 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/main.dart';
-import 'package:training_planner/pages/add_shift_page.dart';
+import 'package:training_planner/pages/home_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 {
final int agendaWeekNr;
@@ -19,95 +17,216 @@ class AgendaPage extends StatefulWidget {
}
class _AgendaPageState extends State<AgendaPage> {
- int weekToStartAt = 0;
- List<int> weekNrs = [];
- List<DateTime> dateTimes = [];
int currentSelectedPageIndex = 0;
- int currentSelectedPageNr = 0;
- DateTime currentSelectedWeek = DateTime.now();
@override
initState() {
super.initState();
-
- weekToStartAt = widget.agendaWeekNr;
- getWeeks();
- currentSelectedPageIndex = weekToStartAt;
- currentSelectedPageNr = weekNrs[weekToStartAt];
- currentSelectedWeek = dateTimes[weekToStartAt];
+ currentSelectedPageIndex = getStartPageIndex();
}
- List<AgendaWeek> getWeeks() {
- List<AgendaWeek> 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) {
- if (weekToStartAt == 0) weekToStartAt = i;
- isCurrentWeek = true;
+ Future<void> addShiftsFromDialog() async {
+ DateTime startDate = getWeek(currentSelectedPageIndex).mondayOfWeek;
+ String dropdownValue = 'Maandag';
+
+ for (int i = 0; i < 7; i++) {
+ DateTime dayOfWeek = startDate;
+ if (!dayIsSelected[i]) continue;
+
+ switch (i) {
+ case 0:
+ dayOfWeek = startDate.add(Duration(days: 0));
+ break;
+ case 1:
+ dayOfWeek = startDate.add(Duration(days: 1));
+ break;
+ case 2:
+ dayOfWeek = startDate.add(Duration(days: 2));
+ break;
+ case 3:
+ dayOfWeek = startDate.add(Duration(days: 3));
+ break;
+ case 4:
+ dayOfWeek = startDate.add(Duration(days: 4));
+ break;
+ case 5:
+ dayOfWeek = startDate.add(Duration(days: 5));
+ break;
+ case 6:
+ dayOfWeek = startDate.add(Duration(days: 6));
+ break;
}
- result.add(
- AgendaWeek(
- weekNr: weekNr,
- mondayOfWeek: mondayOfWeek,
- isCurrentWeek: isCurrentWeek,
- ),
- );
- weekNrs.add(weekNr);
- dateTimes.add(mondayOfWeek);
+ ShiftType type = ShiftType.Dagrit;
+ if (shiftsSelected[1]) type = ShiftType.Avondrit;
+ if (shiftsSelected[2]) type = ShiftType.Terugscannen;
+
+ switch (type) {
+ case ShiftType.Dagrit:
+ dayOfWeek = dayOfWeek.add(Duration(hours: 10));
+ break;
+ case ShiftType.Avondrit:
+ dayOfWeek = dayOfWeek.add(Duration(
+ hours: dayOfWeek.weekday == 6 ? 15 : 17,
+ minutes: dayOfWeek.weekday == 6 ? 30 : 0));
+ break;
+ case ShiftType.Terugscannen:
+ dayOfWeek = dayOfWeek.add(
+ Duration(hours: dayOfWeek.weekday == 6 ? 13 : 14, minutes: 30));
+ break;
+ }
+
+ await shiftProvider.addShift(Shift(start: dayOfWeek, type: type));
+ }
+ }
+
+ List<bool> dayIsSelected = [false, false, false, false, false, false, false];
+ List<bool> shiftsSelected = [false, true, false];
+
+ Future<void> showAddShiftDialog() async {
+ dayIsSelected = [false, false, false, false, false, false, false];
+ shiftsSelected = [false, true, false];
+
+ // set up the buttons
+ Widget cancelButton = FlatButton(
+ child: Text("Terug"),
+ onPressed: () {
+ Navigator.pop(context);
+ },
+ );
+ Widget continueButton = FlatButton(
+ child: Text("Ok"),
+ onPressed: () async {
+ await addShiftsFromDialog();
+ setState(() {});
+ Navigator.pop(context);
+ },
+ );
+
+ // show the dialog
+ await showDialog(
+ context: context,
+ builder: (BuildContext context) {
+ return StatefulBuilder(builder: (context, setState) {
+ return AlertDialog(
+ title: Text("Wanneer wil je werken?"),
+ content: Row(children: [
+ ToggleButtons(
+ direction: Axis.vertical,
+ children: <Widget>[
+ Padding(padding: const EdgeInsets.all(15), child: Text('Ma')),
+ Padding(padding: const EdgeInsets.all(15), child: Text('Di')),
+ Padding(padding: const EdgeInsets.all(15), child: Text('Wo')),
+ Padding(padding: const EdgeInsets.all(15), child: Text('Do')),
+ Padding(padding: const EdgeInsets.all(15), child: Text('Vr')),
+ Padding(padding: const EdgeInsets.all(15), child: Text('Za')),
+ Padding(padding: const EdgeInsets.all(15), child: Text('Zo')),
+ ],
+ onPressed: (int index) {
+ setState(() {
+ dayIsSelected[index] = !dayIsSelected[index];
+ });
+ },
+ isSelected: dayIsSelected,
+ ),
+ Padding(padding: const EdgeInsets.all(20)),
+ ToggleButtons(
+ direction: Axis.vertical,
+ children: <Widget>[
+ Padding(
+ padding: const EdgeInsets.all(15), child: Text('Dagrit')),
+ Padding(
+ padding: const EdgeInsets.all(15),
+ child: Text('Avondrit')),
+ Padding(
+ padding: const EdgeInsets.all(15),
+ child: Text('Terugscan')),
+ ],
+ onPressed: (int index) {
+ setState(() {
+ shiftsSelected = [false, false, false];
+ shiftsSelected[index] = true;
+ });
+ },
+ isSelected: shiftsSelected,
+ ),
+ ]),
+ actions: [
+ cancelButton,
+ continueButton,
+ ],
+ );
+ });
+ },
+ );
+ }
+
+ DateTime getStartWeek() {
+ return DateTime(2000, 1, 1);
+ }
+
+ int getStartPageIndex() {
+ if (widget.agendaWeekNr != 0) return widget.agendaWeekNr;
+ Duration diff = DateTime.now().difference(getStartWeek());
+ int index = diff.inDays ~/ 7;
+
+ if (getWeek(index).mondayOfWeek !=
+ DateUtilities.DateUtils.firstDayOfWeek(DateTime.now())) {
+ return index + 1;
}
- this.weekNrs = weekNrs;
+ return index;
+ }
- return result;
+ int getMaxNumberOfWeeksToDisplay() {
+ DateTime start = getStartWeek();
+ DateTime end = DateTime.now().add(Duration(days: 365));
+
+ return end.difference(start).inDays ~/ 7;
+ }
+
+ AgendaWeek getWeek(int index) {
+ DateTime weekday = getStartWeek().add(Duration(days: index * 7));
+ DateTime mondayOfWeek = DateUtilities.DateUtils.firstDayOfWeek(weekday);
+ DateTime mondayOfCurrentWeek =
+ DateUtilities.DateUtils.firstDayOfWeek(DateTime.now());
+
+ return AgendaWeek(
+ weekNr: DateUtilities.DateUtils.getWeekNumber(mondayOfWeek),
+ mondayOfWeek: mondayOfWeek,
+ isCurrentWeek:
+ DateUtilities.DateUtils.isSameDay(mondayOfWeek, mondayOfCurrentWeek),
+ );
}
@override
Widget build(BuildContext context) {
- List<AgendaWeek> weeks = getWeeks();
-
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(0),
- child: CarouselSlider(
+ child: CarouselSlider.builder(
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
+ initialPage: getStartPageIndex(), // Week nr
),
- items: weeks,
+ itemCount: getMaxNumberOfWeeksToDisplay(),
+ itemBuilder: (context, index, realIndex) => getWeek(index),
),
),
floatingActionButton: FloatingActionButton(
- onPressed: () {
- Navigator.push(
- context,
- MaterialPageRoute(
- builder: (context) => AddShiftPage(
- pageNr: currentSelectedPageNr,
- pageIndex: currentSelectedPageIndex,
- mondayOfWeek: currentSelectedWeek,
- updateParent: weeks[currentSelectedPageIndex].updateFunc!)),
- );
+ onPressed: () async {
+ await showAddShiftDialog();
+ Navigator.pushReplacement(
+ context,
+ MaterialPageRoute(
+ builder: (BuildContext context) => HomePage(
+ agendaWeekNr: currentSelectedPageIndex,
+ )));
},
backgroundColor: Style.titleColor,
child: const Icon(Icons.add),
diff --git a/lib/pages/logbook_page.dart b/lib/pages/logbook_page.dart
index bd9bde2..0e81f49 100644
--- a/lib/pages/logbook_page.dart
+++ b/lib/pages/logbook_page.dart
@@ -2,7 +2,6 @@ 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/main.dart';
-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';