From 1799d1324a9425e2f0f11c143c0c37cb042b05a7 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 18 Aug 2022 12:08:27 +0200 Subject: loading animations --- lib/widgets/agenda_week.dart | 125 ++++++++++++++++++++++++++++--------------- 1 file changed, 83 insertions(+), 42 deletions(-) (limited to 'lib/widgets/agenda_week.dart') 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 { - List weekItems = []; + List? 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 { 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 { ).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(), ); } } -- cgit v1.2.3-70-g09d2