diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-19 13:07:39 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-19 13:07:39 +0200 |
| commit | ec7c6e4f7ebd4e096722c7cfd1e651867207ec07 (patch) | |
| tree | 936aa3778aece0d86ee76a34327a5bd76577fe55 /lib | |
| parent | 019adc4d685e81b658ac88d4f54a4aa151197c09 (diff) | |
v0.3
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/config/defaults.dart | 3 | ||||
| -rw-r--r-- | lib/main.dart | 20 | ||||
| -rw-r--r-- | lib/pages/developer_page.dart | 25 | ||||
| -rw-r--r-- | lib/pages/logbook_page.dart | 19 | ||||
| -rw-r--r-- | lib/services/local_shift_provider_service.dart | 20 | ||||
| -rw-r--r-- | lib/services/log_service.dart | 9 | ||||
| -rw-r--r-- | lib/services/settings_service.dart | 15 | ||||
| -rw-r--r-- | lib/style/style.dart | 12 | ||||
| -rw-r--r-- | lib/widgets/agenda_week_item.dart | 62 |
9 files changed, 131 insertions, 54 deletions
diff --git a/lib/config/defaults.dart b/lib/config/defaults.dart index d71df88..1010e90 100644 --- a/lib/config/defaults.dart +++ b/lib/config/defaults.dart @@ -1,3 +1,6 @@ +String program_version = '0.3.0'; +bool debug_output = false; + class ShiftType { String name; Duration startTime; diff --git a/lib/main.dart b/lib/main.dart index 476a36a..d0ff0d8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:event_bus/event_bus.dart'; import 'package:flutter/material.dart'; import 'package:training_planner/services/ishift_provider_service.dart'; @@ -5,11 +7,16 @@ import 'package:training_planner/services/messaging_service.dart'; import 'package:training_planner/services/mock_shift_provider_service.dart'; import 'package:training_planner/services/local_shift_provider_service.dart'; import 'package:training_planner/services/settings_service.dart'; +import 'package:training_planner/style/style.dart'; import 'pages/home_page.dart'; import 'package:local_auth/local_auth.dart'; void main() { - runApp(const MyApp()); + runZonedGuarded(() { + runApp(const MyApp()); + }, (error, stack) { + // tja.. + }); } final IProgramProviderService shiftProvider = LocalShiftProviderService(); @@ -28,11 +35,20 @@ class MyApp extends StatelessWidget { return MaterialApp( title: 'DHL HourTracker', theme: ThemeData( - backgroundColor: Color.fromARGB(255, 255, 204, 0), + backgroundColor: Style.background, ), home: HomePage( agendaWeekNr: 0, ), + builder: (context, widget) { + Widget error = const Text('...rendering error...'); + if (widget is Scaffold || widget is Navigator) { + error = Scaffold(body: Center(child: error)); + } + ErrorWidget.builder = (errorDetails) => error; + if (widget != null) return widget; + throw ('widget is null'); + }, ); } } diff --git a/lib/pages/developer_page.dart b/lib/pages/developer_page.dart index 05a029a..13d3c5d 100644 --- a/lib/pages/developer_page.dart +++ b/lib/pages/developer_page.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:training_planner/config/defaults.dart'; import 'package:training_planner/events/RefreshWeekEvent.dart'; import 'package:training_planner/main.dart'; import 'package:training_planner/services/local_shift_provider_service.dart'; @@ -15,9 +16,17 @@ class DeveloperPage extends StatefulWidget { } class _DeveloperPageState extends State<DeveloperPage> { + bool canUseLocalAuth = false; + @override initState() { super.initState(); + + auth.canCheckBiometrics.then((bio) => { + auth + .isDeviceSupported() + .then((supported) => {canUseLocalAuth = bio && supported}) + }); } void clearLocalFiles() async { @@ -47,8 +56,22 @@ class _DeveloperPageState extends State<DeveloperPage> { padding: const EdgeInsets.all(50), child: Column( children: [ + Text('Versie ' + program_version), TextButton( - onPressed: () async => clearLocalFiles(), + onPressed: () { + if (canUseLocalAuth) { + auth + .authenticate( + localizedReason: + 'Weet je zeker dat je alle locale bestanden wilt verwijderen?') + .then((value) => { + if (value) {clearLocalFiles()} + }) + .catchError((f) => {}); + } else { + clearLocalFiles(); + } + }, child: Text('Bestanden verwijderen')), ], ), diff --git a/lib/pages/logbook_page.dart b/lib/pages/logbook_page.dart index be49ac8..5449d8f 100644 --- a/lib/pages/logbook_page.dart +++ b/lib/pages/logbook_page.dart @@ -72,12 +72,15 @@ class _LogbookPageState extends State<LogbookPage> { super.initState(); shiftProvider.getPastShifts().then( - (value) => setState( - () { - List<Shift> allShifts = value; - sortShifts(allShifts); - }, - ), + (value) => { + if (mounted) + setState( + () { + List<Shift> allShifts = value; + sortShifts(allShifts); + }, + ) + }, ); } @@ -89,8 +92,8 @@ class _LogbookPageState extends State<LogbookPage> { padding: const EdgeInsets.only(bottom: 8, left: 10, right: 10), child: Container( decoration: BoxDecoration( - border: Border.all(color: Color.fromARGB(255, 140, 140, 180)), - color: Color.fromARGB(255, 180, 180, 200), + border: Border.all(color: Style.logbookEntryBorder), + color: Style.logbookEntryBackground, borderRadius: BorderRadius.all(Radius.circular(8))), child: Padding( padding: const EdgeInsets.all(8), diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart index 9dc045b..fe4d466 100644 --- a/lib/services/local_shift_provider_service.dart +++ b/lib/services/local_shift_provider_service.dart @@ -4,6 +4,7 @@ import 'package:intl/intl.dart'; import 'package:training_planner/config/defaults.dart'; import 'package:training_planner/config/old_data.dart'; import 'package:training_planner/services/ishift_provider_service.dart'; +import 'package:training_planner/services/log_service.dart'; import 'package:training_planner/shift.dart'; import 'package:uuid/uuid.dart'; import 'package:in_date_utils/in_date_utils.dart' as DateUtilities; @@ -30,7 +31,7 @@ class LocalShiftProviderService extends IProgramProviderService { if (startDate.hour > 12 && startDate.hour < 15) type = DefaultConfig.shiftTypes[2]; - print(startDate.toString() + ' -> ' + endDate.toString()); + LogService.log(startDate.toString() + ' -> ' + endDate.toString()); await addShift(Shift( start: startDate, type: type.name, end: endDate, payRate: 13.75)); } @@ -73,7 +74,7 @@ class LocalShiftProviderService extends IProgramProviderService { bool exists = await file.exists(); if (!exists) { - print('creating ' + fullPath); + LogService.log('creating ' + fullPath); await file.create(); await file.writeAsString(jsonEncode([])); } @@ -86,14 +87,15 @@ class LocalShiftProviderService extends IProgramProviderService { for (var shift in shifts) { final file = await _localFile( DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); - print(DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); + LogService.log( + DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); String content = jsonEncode(shifts); - print('writing content to ' + file.path + ' -- ' + content); + LogService.log('writing content to ' + file.path + ' -- ' + content); await file.writeAsString(content); } } catch (e, stacktrace) { - print(stacktrace); - print(e); + LogService.log(stacktrace); + LogService.log(e); } } @@ -107,8 +109,8 @@ class LocalShiftProviderService extends IProgramProviderService { return data; } catch (e, stacktrace) { - print(stacktrace); - print(e); + LogService.log(stacktrace); + LogService.log(e); return []; } } @@ -175,6 +177,8 @@ class LocalShiftProviderService extends IProgramProviderService { } } + result.sort((a, b) => a.start.compareTo(b.start)); + return result; } diff --git a/lib/services/log_service.dart b/lib/services/log_service.dart new file mode 100644 index 0000000..cf8ea0b --- /dev/null +++ b/lib/services/log_service.dart @@ -0,0 +1,9 @@ +import 'package:training_planner/config/defaults.dart'; + +class LogService { + static void log(dynamic data) { + if (debug_output) { + print(data); + } + } +} diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 350d7bd..8f3ea61 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:path_provider/path_provider.dart'; +import 'package:training_planner/services/log_service.dart'; class Settings { double salary; @@ -42,7 +43,7 @@ class SettingsService { bool exists = await file.exists(); if (!exists) { - print('created settings.json'); + LogService.log('created settings.json'); await file.create(); await file.writeAsString(jsonEncode(DefaultSettings())); } @@ -54,11 +55,11 @@ class SettingsService { try { final file = await _localFile; String content = jsonEncode(settings); - print('writing to file: ' + content); + LogService.log('writing to file: ' + content); await file.writeAsString(content); } catch (e, stacktrace) { - print(stacktrace); - print(e); + LogService.log(stacktrace); + LogService.log(e); } } @@ -66,13 +67,13 @@ class SettingsService { try { final file = await _localFile; final contents = await file.readAsString(); - print('read from file: ' + contents); + LogService.log('read from file: ' + contents); var raw = await jsonDecode(contents); var settings = Settings.fromJson(raw); return settings; } catch (e, stacktrace) { - print(stacktrace); - print(e); + LogService.log(stacktrace); + LogService.log(e); writeSettingsToFile(DefaultSettings()); return DefaultSettings(); } diff --git a/lib/style/style.dart b/lib/style/style.dart index f14f607..8d82565 100644 --- a/lib/style/style.dart +++ b/lib/style/style.dart @@ -4,13 +4,13 @@ class Style { static const Color background = Color.fromARGB(255, 255, 204, 0); static const Color titleColor = Color.fromARGB(255, 212, 5, 17); - static const TextStyle bodyNormal = - TextStyle(color: Colors.white, fontSize: 14); - static const TextStyle listItemTitletextBold = TextStyle(color: titleColor, fontSize: 16, fontWeight: FontWeight.bold); - static const TextStyle listItemTitletext = - TextStyle(color: Colors.red, fontSize: 16, fontWeight: FontWeight.w300); - static const Color listEntryBackground = background; + static const Color listEntryStandardColor = Colors.black; + static const Color listEntryTransparentColor = Color.fromARGB(80, 0, 0, 0); + + static const Color logbookEntryBorder = Color.fromARGB(255, 140, 140, 180); + static const Color logbookEntryBackground = + Color.fromARGB(255, 180, 180, 200); } diff --git a/lib/widgets/agenda_week_item.dart b/lib/widgets/agenda_week_item.dart index 7847030..fd61506 100644 --- a/lib/widgets/agenda_week_item.dart +++ b/lib/widgets/agenda_week_item.dart @@ -120,20 +120,28 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { Widget createStopShiftButton() { return TextButton( onPressed: () { - auth - .authenticate( - localizedReason: 'Weet je zeker dat je wilt eindigen?') - .then((value) => { - if (value) - { - setState(() { - widget.shift.setIsActive(false); - shiftProvider.updateShift(widget.shift); - stopNotificationForActiveSession(); - }) - } - }) - .catchError((f) => {}); + if (canUseLocalAuth) { + auth + .authenticate( + localizedReason: 'Weet je zeker dat je wilt eindigen?') + .then((value) => { + if (value && mounted) + { + setState(() { + widget.shift.setIsActive(false); + shiftProvider.updateShift(widget.shift); + stopNotificationForActiveSession(); + }) + } + }) + .catchError((f) => {}); + } else { + setState(() { + widget.shift.setIsActive(false); + shiftProvider.updateShift(widget.shift); + stopNotificationForActiveSession(); + }); + } }, child: Text('Einde')); } @@ -253,10 +261,10 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { @override Widget build(BuildContext context) { Widget startShiftWidget = createShiftModifyButton(); - TextStyle endDateTextStyle = TextStyle(color: Colors.black); + TextStyle endDateTextStyle = TextStyle(color: Style.listEntryStandardColor); if (!widget.shift.isDone()) { - endDateTextStyle = TextStyle(color: Color.fromARGB(80, 0, 0, 0)); + endDateTextStyle = TextStyle(color: Style.listEntryTransparentColor); } setStartAndEndTime(); @@ -323,22 +331,32 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { ), Container( padding: const EdgeInsets.only(left: 10), - child: Text( - DateHelper.getWeekdayName(widget.shift.start.weekday), - style: Style.listItemTitletextBold, - textAlign: TextAlign.center, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + DateHelper.getWeekdayName( + widget.shift.start.weekday), + style: Style.listItemTitletextBold, + ), + Text( + "${widget.shift.start.day.toString().padLeft(2, '0')}e", + ), + ], ), width: widthOfWeekday, ), GestureDetector( onLongPress: () { requestStartAndEndTimeForShift() - .then((e) => {setState(() {})}); + .then((e) => {if (mounted) setState(() {})}); }, child: Container( child: RichText( text: TextSpan( - style: TextStyle(color: Colors.black), + style: TextStyle( + color: Style.listEntryStandardColor), children: [ TextSpan(text: ' | ' + shiftTime), TextSpan( |
