summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/config/defaults.dart26
-rw-r--r--lib/main.dart2
-rw-r--r--lib/pages/home_page.dart45
-rw-r--r--lib/pages/settings_page.dart58
-rw-r--r--lib/services/local_shift_provider_service.dart2
-rw-r--r--lib/services/settings_service.dart80
-rw-r--r--lib/widgets/agenda_week_title.dart2
7 files changed, 212 insertions, 3 deletions
diff --git a/lib/config/defaults.dart b/lib/config/defaults.dart
new file mode 100644
index 0000000..2553bbe
--- /dev/null
+++ b/lib/config/defaults.dart
@@ -0,0 +1,26 @@
+class ShiftType {
+ String name;
+ Duration startTime;
+ Duration startTimeSturday;
+ ShiftType(
+ {required this.name,
+ required this.startTime,
+ required this.startTimeSturday});
+}
+
+class DefaultConfig {
+ static List<ShiftType> shiftTypes = [
+ ShiftType(
+ name: 'Dagrit',
+ startTime: Duration(hours: 10),
+ startTimeSturday: Duration(hours: 10)),
+ ShiftType(
+ name: 'Avondrit',
+ startTime: Duration(hours: 17),
+ startTimeSturday: Duration(hours: 15, minutes: 30)),
+ ShiftType(
+ name: 'Terugscan',
+ startTime: Duration(hours: 14, minutes: 30),
+ startTimeSturday: Duration(hours: 13, minutes: 30)),
+ ];
+}
diff --git a/lib/main.dart b/lib/main.dart
index 6e15b59..476a36a 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -4,6 +4,7 @@ import 'package:training_planner/services/ishift_provider_service.dart';
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 'pages/home_page.dart';
import 'package:local_auth/local_auth.dart';
@@ -14,6 +15,7 @@ void main() {
final IProgramProviderService shiftProvider = LocalShiftProviderService();
final LocalAuthentication auth = LocalAuthentication();
final MessagingService messageService = MessagingService();
+final SettingsService settingsService = SettingsService();
EventBus eventBus = EventBus();
diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart
index 3b57a0f..87d3ce7 100644
--- a/lib/pages/home_page.dart
+++ b/lib/pages/home_page.dart
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:training_planner/pages/agenda_page.dart';
import 'package:training_planner/pages/logbook_page.dart';
+import 'package:training_planner/pages/settings_page.dart';
import 'package:training_planner/shift.dart';
import 'package:training_planner/main.dart';
import 'package:training_planner/style/style.dart';
@@ -39,9 +40,53 @@ class _HomePageState extends State<HomePage> {
});
}
+ Drawer createDrawer() {
+ return Drawer(
+ // Add a ListView to the drawer. This ensures the user can scroll
+ // through the options in the drawer if there isn't enough vertical
+ // space to fit everything.
+ child: ListView(
+ // Important: Remove any padding from the ListView.
+ padding: EdgeInsets.zero,
+ children: [
+ SizedBox(
+ height: MediaQuery.of(context).viewPadding.top + 60,
+ child: const DrawerHeader(
+ decoration: BoxDecoration(
+ color: Style.background,
+ ),
+ child: Text('Mijn werkschema'),
+ ),
+ ),
+ ListTile(
+ title: const Text('Instellingen'),
+ onTap: () {
+ settingsService.readSettingsFromFile().then((value) => {
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => SettingsPage(
+ settings: value,
+ )),
+ )
+ });
+ },
+ ),
+ ListTile(
+ title: const Text('Profiel'),
+ onTap: () {
+ // ...
+ },
+ ),
+ ],
+ ),
+ );
+ }
+
@override
Widget build(BuildContext context) {
return Scaffold(
+ drawer: createDrawer(),
appBar: AppBar(
title: const Text('Werkschema'),
backgroundColor: Style.background,
diff --git a/lib/pages/settings_page.dart b/lib/pages/settings_page.dart
new file mode 100644
index 0000000..08dbaf4
--- /dev/null
+++ b/lib/pages/settings_page.dart
@@ -0,0 +1,58 @@
+import 'package:flutter/material.dart';
+import 'package:training_planner/main.dart';
+import 'package:training_planner/services/settings_service.dart';
+import 'package:training_planner/style/style.dart';
+
+class SettingsPage extends StatefulWidget {
+ final Settings settings;
+
+ @override
+ _SettingsPageState createState() => _SettingsPageState();
+
+ const SettingsPage({Key? key, required this.settings}) : super(key: key);
+}
+
+class _SettingsPageState extends State<SettingsPage> {
+ @override
+ initState() {
+ super.initState();
+ }
+
+ Future<void> saveSettings() async {
+ settingsService.writeSettingsToFile(widget.settings);
+ Navigator.pop(context);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text('Instellingen'),
+ backgroundColor: Style.background,
+ foregroundColor: Style.titleColor,
+ ),
+ body: Center(
+ child: Padding(
+ padding: const EdgeInsets.all(50),
+ child: Column(
+ children: [
+ TextFormField(
+ keyboardType: TextInputType.number,
+ initialValue: widget.settings.salary.toStringAsFixed(2),
+ onChanged: (value) =>
+ {widget.settings.salary = double.parse(value)},
+ decoration: InputDecoration(
+ labelText: 'Huidige uurloon',
+ ),
+ ),
+ Padding(padding: const EdgeInsets.all(20)),
+ TextButton(
+ onPressed: () async => await saveSettings(),
+ child: Text('Opslaan')),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart
index 2d00a1e..6839dff 100644
--- a/lib/services/local_shift_provider_service.dart
+++ b/lib/services/local_shift_provider_service.dart
@@ -34,7 +34,6 @@ class LocalShiftProviderService extends IProgramProviderService {
final file = await _localFile;
String content = jsonEncode(shifts);
await file.writeAsString(content);
- print('Writing to file: ' + content);
} catch (e, stacktrace) {
print(stacktrace);
print(e);
@@ -48,7 +47,6 @@ class LocalShiftProviderService extends IProgramProviderService {
final Iterable iterable = await jsonDecode(contents);
List<Shift> data =
List<Shift>.from(iterable.map((model) => Shift.fromJson(model)));
- print('Read from file: ' + contents);
return data;
} catch (e, stacktrace) {
diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart
new file mode 100644
index 0000000..027ecc2
--- /dev/null
+++ b/lib/services/settings_service.dart
@@ -0,0 +1,80 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:path_provider/path_provider.dart';
+
+class Settings {
+ double salary;
+
+ Settings({required this.salary});
+
+ Settings.fromJson(Map<String, dynamic> json)
+ : salary = double.parse(json['salary']);
+
+ Map<String, dynamic> toJson() {
+ return {
+ 'salary': salary.toStringAsFixed(2),
+ };
+ }
+}
+
+class DefaultSettings extends Settings {
+ DefaultSettings() : super(salary: 13.75);
+
+ DefaultSettings.fromJson(Map<String, dynamic> json) : super.fromJson(json);
+
+ Map<String, dynamic> toJson() {
+ return {
+ 'salary': salary.toStringAsFixed(2),
+ };
+ }
+}
+
+class SettingsService {
+ Future<String> get _localPath async {
+ final directory = await getApplicationDocumentsDirectory();
+ return directory.path;
+ }
+
+ Future<File> get _localFile async {
+ final path = await _localPath;
+ File file = File('$path/settings.json');
+
+ bool exists = await file.exists();
+ if (!exists) {
+ print('created settings.json');
+ await file.create();
+ await writeSettingsToFile(DefaultSettings());
+ }
+
+ return File('$path/settings.json');
+ }
+
+ Future<void> writeSettingsToFile(Settings settings) async {
+ try {
+ final file = await _localFile;
+ String content = jsonEncode(settings);
+ print('writing to file: ' + content);
+ await file.writeAsString(content);
+ } catch (e, stacktrace) {
+ print(stacktrace);
+ print(e);
+ }
+ }
+
+ Future<Settings> readSettingsFromFile() async {
+ try {
+ final file = await _localFile;
+ final contents = await file.readAsString();
+ print('read from file: ' + contents);
+ var raw = await jsonDecode(contents);
+ var settings = Settings.fromJson(raw);
+ return settings;
+ } catch (e, stacktrace) {
+ print(stacktrace);
+ print(e);
+ writeSettingsToFile(DefaultSettings());
+ return DefaultSettings();
+ }
+ }
+}
diff --git a/lib/widgets/agenda_week_title.dart b/lib/widgets/agenda_week_title.dart
index 582b6b8..2c18986 100644
--- a/lib/widgets/agenda_week_title.dart
+++ b/lib/widgets/agenda_week_title.dart
@@ -28,7 +28,7 @@ class _AgendaWeekTitleState extends State<AgendaWeekTitle> {
children: [
this.widget.isCurrentWeek
? Icon(Icons.today)
- : Padding(padding: const EdgeInsets.all(0)),
+ : Padding(padding: const EdgeInsets.all(12)),
Center(
child: Text(
" Week #" +