summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-08-16 20:54:02 +0200
committerAldrik Ramaekers <aldrik@amftech.nl>2022-08-16 20:54:02 +0200
commit72aa769bc32bb920bd255e68d6ad508e8543a398 (patch)
tree375f33dea71fe0c31a6827797d9fe62df05a5f72
parent9144664c98824924e3d7668557a4455693bcf7f6 (diff)
poop
-rw-r--r--lib/pages/add_shift_page.dart23
-rw-r--r--lib/pages/agenda_page.dart21
-rw-r--r--lib/services/ishift_provider_service.dart1
-rw-r--r--lib/services/mock_program_provider_service.dart5
-rw-r--r--lib/services/program_provider_service.dart12
-rw-r--r--lib/widgets/agenda_week.dart56
-rw-r--r--lib/widgets/agenda_week_item.dart63
7 files changed, 125 insertions, 56 deletions
diff --git a/lib/pages/add_shift_page.dart b/lib/pages/add_shift_page.dart
index d81ae3e..21bdbf0 100644
--- a/lib/pages/add_shift_page.dart
+++ b/lib/pages/add_shift_page.dart
@@ -9,6 +9,8 @@ class AddShiftPage extends StatefulWidget {
final int pageNr;
final int pageIndex;
final DateTime mondayOfWeek;
+ final Function updateParent;
+
@override
_AddShiftPageState createState() => _AddShiftPageState();
@@ -17,6 +19,7 @@ class AddShiftPage extends StatefulWidget {
required this.pageNr,
required this.pageIndex,
required this.mondayOfWeek,
+ required this.updateParent,
}) : super(key: key);
}
@@ -29,7 +32,7 @@ class _AddShiftPageState extends State<AddShiftPage> {
String dropdownValue = 'Maandag';
List<bool> isSelected = [false, true, false];
- void addShift() {
+ Future<void> addShift() async {
DateTime startDate = widget.mondayOfWeek;
switch (dropdownValue) {
case 'Maandag':
@@ -74,17 +77,9 @@ class _AddShiftPageState extends State<AddShiftPage> {
break;
}
- shiftProvider.addShift(Shift(start: startDate, type: type));
-
- Navigator.pop(context, true);
-
- // Previous page will not refresh without this.
- Navigator.pushAndRemoveUntil(
- context,
- MaterialPageRoute(
- builder: (context) => HomePage(agendaWeekNr: widget.pageIndex)),
- (Route<dynamic> route) => false,
- );
+ await shiftProvider.addShift(Shift(start: startDate, type: type));
+ widget.updateParent();
+ Navigator.pop(context);
}
@override
@@ -152,7 +147,9 @@ class _AddShiftPageState extends State<AddShiftPage> {
Padding(
padding: const EdgeInsets.all(20),
),
- TextButton(onPressed: () => {addShift()}, child: Text('Toevoegen')),
+ TextButton(
+ onPressed: () async => {await addShift()},
+ child: Text('Toevoegen')),
],
)));
}
diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart
index a273cd0..f052434 100644
--- a/lib/pages/agenda_page.dart
+++ b/lib/pages/agenda_page.dart
@@ -1,6 +1,7 @@
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';
@@ -19,7 +20,6 @@ class AgendaPage extends StatefulWidget {
class _AgendaPageState extends State<AgendaPage> {
int weekToStartAt = 0;
- List<Widget> weeks = [];
List<int> weekNrs = [];
List<DateTime> dateTimes = [];
int currentSelectedPageIndex = 0;
@@ -31,15 +31,14 @@ class _AgendaPageState extends State<AgendaPage> {
super.initState();
weekToStartAt = widget.agendaWeekNr;
- weeks = getWeeks();
-
+ getWeeks();
currentSelectedPageIndex = weekToStartAt;
currentSelectedPageNr = weekNrs[weekToStartAt];
currentSelectedWeek = dateTimes[weekToStartAt];
}
- List<Widget> getWeeks() {
- List<Widget> result = [];
+ List<AgendaWeek> getWeeks() {
+ List<AgendaWeek> result = [];
List<int> weekNrs = [];
DateTime startDate =
DateUtilities.DateUtils.firstDayOfWeek(DateTime(2020, 1, 1));
@@ -77,6 +76,8 @@ class _AgendaPageState extends State<AgendaPage> {
@override
Widget build(BuildContext context) {
+ List<AgendaWeek> weeks = getWeeks();
+
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(0),
@@ -93,7 +94,7 @@ class _AgendaPageState extends State<AgendaPage> {
enableInfiniteScroll: false,
initialPage: weekToStartAt, // Week nr
),
- items: getWeeks(),
+ items: weeks,
),
),
floatingActionButton: FloatingActionButton(
@@ -102,10 +103,10 @@ class _AgendaPageState extends State<AgendaPage> {
context,
MaterialPageRoute(
builder: (context) => AddShiftPage(
- pageNr: currentSelectedPageNr,
- pageIndex: currentSelectedPageIndex,
- mondayOfWeek: currentSelectedWeek,
- )),
+ pageNr: currentSelectedPageNr,
+ pageIndex: currentSelectedPageIndex,
+ mondayOfWeek: currentSelectedWeek,
+ updateParent: weeks[currentSelectedPageIndex].updateFunc!)),
);
},
backgroundColor: Style.titleColor,
diff --git a/lib/services/ishift_provider_service.dart b/lib/services/ishift_provider_service.dart
index 2022536..7f0e6d5 100644
--- a/lib/services/ishift_provider_service.dart
+++ b/lib/services/ishift_provider_service.dart
@@ -7,4 +7,5 @@ abstract class IProgramProviderService {
Future<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek);
Future<void> updateShift(Shift shift);
Future<void> addShift(Shift shift);
+ Future<void> deleteShift(Shift shift);
}
diff --git a/lib/services/mock_program_provider_service.dart b/lib/services/mock_program_provider_service.dart
index 5a1f9f4..8f8db3e 100644
--- a/lib/services/mock_program_provider_service.dart
+++ b/lib/services/mock_program_provider_service.dart
@@ -87,4 +87,9 @@ class MockShiftProviderService extends IProgramProviderService {
return result;
}
+
+ @override
+ Future<void> deleteShift(Shift shift) async {
+ savedShifts.remove(shift);
+ }
}
diff --git a/lib/services/program_provider_service.dart b/lib/services/program_provider_service.dart
index 375ed8b..1512096 100644
--- a/lib/services/program_provider_service.dart
+++ b/lib/services/program_provider_service.dart
@@ -101,4 +101,16 @@ class ShiftProviderService extends IProgramProviderService {
return result;
}
+
+ @override
+ Future<void> deleteShift(Shift shift) async {
+ List<Shift> savedShifts = await readShiftsFromFile();
+ for (var item in savedShifts) {
+ if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) {
+ savedShifts.remove(item);
+ break;
+ }
+ }
+ await writeShiftsFromFile(savedShifts);
+ }
}
diff --git a/lib/widgets/agenda_week.dart b/lib/widgets/agenda_week.dart
index 4a654ce..754a46b 100644
--- a/lib/widgets/agenda_week.dart
+++ b/lib/widgets/agenda_week.dart
@@ -10,11 +10,12 @@ class AgendaWeek extends StatefulWidget {
final int weekNr;
final DateTime mondayOfWeek;
final bool isCurrentWeek;
+ Function? updateFunc;
@override
_AgendaWeekState createState() => _AgendaWeekState();
- const AgendaWeek({
+ AgendaWeek({
Key? key,
required this.weekNr,
required this.mondayOfWeek,
@@ -25,31 +26,40 @@ class AgendaWeek extends StatefulWidget {
class _AgendaWeekState extends State<AgendaWeek> {
List<Widget> weekItems = [];
- @override
- void initState() {
- super.initState();
+ void updateItems() {
+ setState(() {
+ shiftProvider
+ .getShiftsForWeek(this.widget.mondayOfWeek)
+ .then((value) => setState(() {
+ weekItems = [
+ AgendaWeekTitle(
+ weekNr: this.widget.weekNr,
+ mondayOfWeek: this.widget.mondayOfWeek,
+ isCurrentWeek: this.widget.isCurrentWeek),
+ Padding(
+ padding: const EdgeInsets.all(10),
+ )
+ ];
- shiftProvider
- .getShiftsForWeek(this.widget.mondayOfWeek)
- .then((value) => setState(() {
- weekItems = [
- AgendaWeekTitle(
- weekNr: this.widget.weekNr,
- mondayOfWeek: this.widget.mondayOfWeek,
- isCurrentWeek: this.widget.isCurrentWeek),
- Padding(
- padding: const EdgeInsets.all(10),
- )
- ];
+ for (var item in value) {
+ weekItems.add(new AgendaWeekItem(
+ shift: item,
+ updateParent: updateItems,
+ ));
+ }
- for (var item in value) {
- weekItems.add(new AgendaWeekItem(shift: item));
- }
+ weekItems.add(Padding(
+ padding: const EdgeInsets.all(50),
+ ));
+ }));
+ });
+ }
- weekItems.add(Padding(
- padding: const EdgeInsets.all(50),
- ));
- }));
+ @override
+ void initState() {
+ super.initState();
+ updateItems();
+ widget.updateFunc = updateItems;
}
@override
diff --git a/lib/widgets/agenda_week_item.dart b/lib/widgets/agenda_week_item.dart
index f3145dd..779b42d 100644
--- a/lib/widgets/agenda_week_item.dart
+++ b/lib/widgets/agenda_week_item.dart
@@ -10,9 +10,12 @@ import '../style/style.dart';
class AgendaWeekItem extends StatefulWidget {
final Shift shift;
+ final Function updateParent;
+
const AgendaWeekItem({
Key? key,
required this.shift,
+ required this.updateParent,
}) : super(key: key);
@override
@@ -186,7 +189,7 @@ class _ExerciseEntryState extends State<AgendaWeekItem> {
endTime.hour,
endTime.minute);
- shiftProvider.updateShift(widget.shift);
+ await shiftProvider.updateShift(widget.shift);
}
Widget createCompleteOldShiftButton() {
@@ -209,6 +212,41 @@ class _ExerciseEntryState extends State<AgendaWeekItem> {
return Padding(padding: const EdgeInsets.all(0));
}
+ void showDeleteShiftModal() {
+ // set up the buttons
+ Widget cancelButton = FlatButton(
+ child: Text("Terug"),
+ onPressed: () {
+ Navigator.pop(context);
+ },
+ );
+ Widget continueButton = FlatButton(
+ child: Text("Verwijder"),
+ onPressed: () async {
+ await shiftProvider.deleteShift(widget.shift);
+ Navigator.pop(context);
+ widget.updateParent();
+ },
+ );
+ // set up the AlertDialog
+ AlertDialog alert = AlertDialog(
+ title: Text("Verwijderen"),
+ content: Text("Werktijd verwijderen uit schema?"),
+ actions: [
+ cancelButton,
+ continueButton,
+ ],
+ );
+
+ // show the dialog
+ showDialog(
+ context: context,
+ builder: (BuildContext context) {
+ return alert;
+ },
+ );
+ }
+
@override
Widget build(BuildContext context) {
Widget startShiftWidget = createShiftModifyButton();
@@ -240,15 +278,20 @@ class _ExerciseEntryState extends State<AgendaWeekItem> {
padding: EdgeInsets.only(right: 5),
child: Row(
children: [
- Container(
- decoration: BoxDecoration(
- color: widget.shift.getStatusColor(),
- borderRadius: BorderRadius.only(
- topLeft: Radius.circular(8),
- bottomLeft: Radius.circular(8))),
- height: 48.0,
- width: 32.0,
- child: widget.shift.getStatusIcon(),
+ GestureDetector(
+ onLongPress: () {
+ showDeleteShiftModal();
+ },
+ child: Container(
+ decoration: BoxDecoration(
+ color: widget.shift.getStatusColor(),
+ borderRadius: BorderRadius.only(
+ topLeft: Radius.circular(8),
+ bottomLeft: Radius.circular(8))),
+ height: 48.0,
+ width: 32.0,
+ child: widget.shift.getStatusIcon(),
+ ),
),
Container(
padding: const EdgeInsets.only(left: 10),