diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-16 20:54:02 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-16 20:54:02 +0200 |
| commit | 72aa769bc32bb920bd255e68d6ad508e8543a398 (patch) | |
| tree | 375f33dea71fe0c31a6827797d9fe62df05a5f72 | |
| parent | 9144664c98824924e3d7668557a4455693bcf7f6 (diff) | |
poop
| -rw-r--r-- | lib/pages/add_shift_page.dart | 23 | ||||
| -rw-r--r-- | lib/pages/agenda_page.dart | 21 | ||||
| -rw-r--r-- | lib/services/ishift_provider_service.dart | 1 | ||||
| -rw-r--r-- | lib/services/mock_program_provider_service.dart | 5 | ||||
| -rw-r--r-- | lib/services/program_provider_service.dart | 12 | ||||
| -rw-r--r-- | lib/widgets/agenda_week.dart | 56 | ||||
| -rw-r--r-- | lib/widgets/agenda_week_item.dart | 63 |
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), |
