diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-18 12:08:27 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-18 12:08:27 +0200 |
| commit | 1799d1324a9425e2f0f11c143c0c37cb042b05a7 (patch) | |
| tree | 77b9dc86e1aa2e768bb9f500709be0aeba4f0371 /lib | |
| parent | 349d704b67cf7d07bd8f8878735f98158a9a1756 (diff) | |
loading animations
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pages/logbook_page.dart | 67 | ||||
| -rw-r--r-- | lib/services/local_shift_provider_service.dart | 2 | ||||
| -rw-r--r-- | lib/shift.dart | 2 | ||||
| -rw-r--r-- | lib/widgets/agenda_week.dart | 125 |
4 files changed, 130 insertions, 66 deletions
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(), ); } } |
