summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README3
-rw-r--r--lib/pages/logbook_page.dart67
-rw-r--r--lib/services/local_shift_provider_service.dart2
-rw-r--r--lib/shift.dart2
-rw-r--r--lib/widgets/agenda_week.dart125
-rw-r--r--pubspec.yaml1
6 files changed, 132 insertions, 68 deletions
diff --git a/README b/README
index cac3a0d..9d796af 100644
--- a/README
+++ b/README
@@ -2,9 +2,7 @@
- exceptions afhandelen binnen localShiftProvider en doorgeven aan ui
# Nog te doen
-- laad animaties voor het lezen van locale bestanden (testen met delays)
- uurloon van gebruiker gebruiken in berekeningen
-- versie toevoegen aan locale bestanden
# Features
- Aanmelden van werktijden
@@ -18,3 +16,4 @@
- Laat salaris zien per shift
- duidelijke berichtgeving en foutmeldingen
- Instellingen pagina voor persoonlijke instellingen en salaris
+- Animaties tijdens het ophalen van data
diff --git a/lib/pages/logbook_page.dart b/lib/pages/logbook_page.dart
index a9ef211..fb21c9a 100644
--- a/lib/pages/logbook_page.dart
+++ b/lib/pages/logbook_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:loading_animation_widget/loading_animation_widget.dart';
import 'package:training_planner/main.dart';
import 'package:training_planner/shift.dart';
import 'package:training_planner/style/style.dart';
@@ -36,7 +37,7 @@ class MonthData {
}
class _LogbookPageState extends State<LogbookPage> {
- List<MonthData> months = [];
+ List<MonthData>? months;
void updateMonthData(MonthData month, Shift shift) {
month.shifts.add(shift);
@@ -44,12 +45,13 @@ class _LogbookPageState extends State<LogbookPage> {
}
void sortShifts(List<Shift> shifts) {
+ months = [];
for (var shift in shifts) {
DateTime firstDayOfMonth =
DateUtilities.DateUtils.firstDayOfMonth(shift.start);
bool found = false;
- for (var month in months) {
+ for (var month in months!) {
if (month.firstDayOfMonth == firstDayOfMonth) {
updateMonthData(month, shift);
found = true;
@@ -57,12 +59,12 @@ class _LogbookPageState extends State<LogbookPage> {
}
if (!found) {
- months
+ months!
.add(MonthData(firstDayOfMonth: firstDayOfMonth, shifts: [shift]));
}
}
- months.sort((a, b) => b.firstDayOfMonth.compareTo(a.firstDayOfMonth));
+ months!.sort((a, b) => b.firstDayOfMonth.compareTo(a.firstDayOfMonth));
}
@override
@@ -82,7 +84,7 @@ class _LogbookPageState extends State<LogbookPage> {
List<Widget> createMonthDataWidgets() {
List<Widget> result = [];
- for (var month in months) {
+ for (var month in months!) {
result.add(Padding(
padding: const EdgeInsets.only(bottom: 8, left: 10, right: 10),
child: Container(
@@ -120,10 +122,44 @@ class _LogbookPageState extends State<LogbookPage> {
return result;
}
- @override
- Widget build(BuildContext context) {
+ Widget getDataList() {
var monthDataWidgets = createMonthDataWidgets();
+ return SafeArea(
+ child: CustomScrollView(
+ physics: null,
+ slivers: [
+ SliverPadding(padding: EdgeInsets.only(top: 20)),
+ SliverList(
+ delegate: SliverChildBuilderDelegate(
+ (BuildContext context, int index) {
+ return monthDataWidgets[index];
+ },
+ childCount: monthDataWidgets.length,
+ )),
+ SliverPadding(padding: EdgeInsets.only(top: 20)),
+ ],
+ ),
+ );
+ }
+
+ Widget getLoadingScreen() {
+ return LoadingAnimationWidget.flickr(
+ leftDotColor: Style.titleColor,
+ rightDotColor: Style.background,
+ size: MediaQuery.of(context).size.width / 4,
+ );
+ }
+ Widget getLoadingScreenOrDataList() {
+ if (months != null) {
+ return getDataList();
+ } else {
+ return getLoadingScreen();
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
return ShaderMask(
shaderCallback: (Rect rect) {
return LinearGradient(
@@ -144,22 +180,7 @@ class _LogbookPageState extends State<LogbookPage> {
).createShader(rect);
},
blendMode: BlendMode.dstOut,
- child: SafeArea(
- child: CustomScrollView(
- physics: null,
- slivers: [
- SliverPadding(padding: EdgeInsets.only(top: 20)),
- SliverList(
- delegate: SliverChildBuilderDelegate(
- (BuildContext context, int index) {
- return monthDataWidgets[index];
- },
- childCount: monthDataWidgets.length,
- )),
- SliverPadding(padding: EdgeInsets.only(top: 20)),
- ],
- ),
- ),
+ child: getLoadingScreenOrDataList(),
);
}
}
diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart
index d6cec51..4894820 100644
--- a/lib/services/local_shift_provider_service.dart
+++ b/lib/services/local_shift_provider_service.dart
@@ -100,6 +100,7 @@ class LocalShiftProviderService extends IProgramProviderService {
@override
Future<List<Shift>> getPastShifts() async {
+ await Future.delayed(Duration(seconds: 1));
List<Shift> shifts = [];
Directory dir = await _localDir;
var list = dir.listSync();
@@ -123,6 +124,7 @@ class LocalShiftProviderService extends IProgramProviderService {
@override
Future<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek) async {
+ await Future.delayed(Duration(seconds: 1));
var items = await readShiftsFromFile(
DateUtilities.DateUtils.firstDayOfWeek(firstDayOfWeek));
List<Shift> result = [];
diff --git a/lib/shift.dart b/lib/shift.dart
index a7c7719..fb79a04 100644
--- a/lib/shift.dart
+++ b/lib/shift.dart
@@ -109,7 +109,7 @@ class Shift {
}
double getMinutePayRate() {
- return 0.22916666;
+ return payRate / 60;
}
bool shiftIsOpenButBeforeToday() {
diff --git a/lib/widgets/agenda_week.dart b/lib/widgets/agenda_week.dart
index a8f9350..fa3d100 100644
--- a/lib/widgets/agenda_week.dart
+++ b/lib/widgets/agenda_week.dart
@@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
+import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:training_planner/events/RefreshWeekEvent.dart';
import 'package:training_planner/main.dart';
import 'package:training_planner/shift.dart';
@@ -26,35 +27,41 @@ class AgendaWeek extends StatefulWidget {
}
class _AgendaWeekState extends State<AgendaWeek> {
- List<Widget> weekItems = [];
+ List<Widget>? weekItems;
StreamSubscription? eventbusSubscription;
- void updateItems() {
+ void updateItems() async {
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),
- )
- ];
-
- for (var item in value) {
- weekItems.add(new AgendaWeekItem(
- shift: item,
- updateParent: updateItems,
- ));
- }
-
- weekItems.add(Padding(
- padding: const EdgeInsets.all(50),
- ));
- }));
+ weekItems = null;
+ });
+
+ var data = await shiftProvider.getShiftsForWeek(this.widget.mondayOfWeek);
+ if (!mounted) return;
+ 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 data) {
+ weekItems!.add(new AgendaWeekItem(
+ shift: item,
+ updateParent: updateItems,
+ ));
+ }
+
+ if (data.isEmpty) {
+ weekItems!.add(Center(child: Text('Geen werktijden')));
+ }
+
+ weekItems!.add(Padding(
+ padding: const EdgeInsets.all(50),
+ ));
});
}
@@ -74,6 +81,55 @@ class _AgendaWeekState extends State<AgendaWeek> {
super.dispose();
}
+ Widget getDataList() {
+ return SafeArea(
+ child: CustomScrollView(
+ physics: null,
+ slivers: [
+ SliverPadding(padding: EdgeInsets.only(top: 20)),
+ SliverList(
+ delegate: SliverChildBuilderDelegate(
+ (BuildContext context, int index) {
+ return weekItems![index];
+ },
+ childCount: weekItems!.length,
+ )),
+ SliverPadding(padding: EdgeInsets.only(top: 20)),
+ ],
+ ),
+ );
+ }
+
+ Widget getLoadingScreen() {
+ return Column(
+ children: [
+ Padding(
+ padding: const EdgeInsets.all(10),
+ ),
+ AgendaWeekTitle(
+ weekNr: this.widget.weekNr,
+ mondayOfWeek: this.widget.mondayOfWeek,
+ isCurrentWeek: this.widget.isCurrentWeek),
+ Padding(
+ padding: const EdgeInsets.all(10),
+ ),
+ LoadingAnimationWidget.flickr(
+ leftDotColor: Style.titleColor,
+ rightDotColor: Style.background,
+ size: MediaQuery.of(context).size.width / 4,
+ )
+ ],
+ );
+ }
+
+ Widget getLoadingScreenOrDataList() {
+ if (weekItems != null) {
+ return getDataList();
+ } else {
+ return getLoadingScreen();
+ }
+ }
+
@override
Widget build(BuildContext context) {
return ShaderMask(
@@ -96,22 +152,7 @@ class _AgendaWeekState extends State<AgendaWeek> {
).createShader(rect);
},
blendMode: BlendMode.dstOut,
- child: SafeArea(
- child: CustomScrollView(
- physics: null,
- slivers: [
- SliverPadding(padding: EdgeInsets.only(top: 20)),
- SliverList(
- delegate: SliverChildBuilderDelegate(
- (BuildContext context, int index) {
- return weekItems[index];
- },
- childCount: weekItems.length,
- )),
- SliverPadding(padding: EdgeInsets.only(top: 20)),
- ],
- ),
- ),
+ child: getLoadingScreenOrDataList(),
);
}
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 27563df..4512295 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -41,6 +41,7 @@ dependencies:
local_auth: ^1.1.11
flutter_local_notifications: ^9.5.3+1
path_provider: ^2.0.10
+ loading_animation_widget: ^1.1.0+5
dev_dependencies:
flutter_test: