wt1.1c auth->cache, control page, animation base exercise percent

This commit is contained in:
Bossanyi Tibor
2020-09-01 16:47:45 +02:00
parent 18d6994068
commit 6b0892ec09
38 changed files with 1148 additions and 261 deletions
+153
View File
@@ -0,0 +1,153 @@
import 'dart:async';
import 'package:aitrainer_app/animations/test_progress_animation.dart';
import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/repository/exercise_repository.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:percent_indicator/linear_percent_indicator.dart';
import 'package:rainbow_color/rainbow_color.dart';
class AppBarNav extends StatefulWidget implements PreferredSizeWidget {
final MenuBloc menuBloc;
const AppBarNav({this.menuBloc});
@override
_AppBarNav createState() => _AppBarNav();
@override
Size get preferredSize => const Size.fromHeight(60);
}
class _AppBarNav extends State<AppBarNav> with SingleTickerProviderStateMixin {
Animation<Color> colorAnim;
//Animation<double> sizeAnim;
AnimationController colorController;
//AnimationController sizeController;
MenuBloc menuBloc;
@override
void initState() {
colorController =
AnimationController(duration: Duration(seconds: 4), vsync: this);
//sizeController =
// AnimationController(duration: Duration(seconds: 3), vsync: this);
/* final curvedAnimation = CurvedAnimation(
parent: sizeController,
curve: Curves.easeIn,
reverseCurve: Curves.easeInOutBack,
);
sizeAnim =
Tween<double>(begin: 0, end: 1.5).animate(curvedAnimation)
..addStatusListener((status) {
if (status == AnimationStatus.completed) {
sizeController.reverse();
} else if (status == AnimationStatus.dismissed) {
Timer(Duration(seconds: 5), () {
sizeController.forward();
});
}
}); */
colorAnim = RainbowColorTween([Colors.white70,
Colors.greenAccent,
Colors.lightGreen,
Colors.lightGreenAccent,
Colors.yellow,
Colors.yellowAccent,
Colors.orange,
Colors.orangeAccent,
Colors.white70])
.animate(colorController)
..addListener(() { setState(() {}); })
..addStatusListener((status) {
if (status == AnimationStatus.completed) {
Timer(Duration(seconds: 10), () {
colorController.reset();
colorController.forward();
});
} else if (status == AnimationStatus.dismissed) {
colorController.forward();
}
});
colorController.forward();
super.initState();
}
@override
Widget build(BuildContext context) {
menuBloc = BlocProvider.of<MenuBloc>(context);
return AppBar(
backgroundColor: Colors.black,
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
getAnimatedWidget(),
Image.asset(
'asset/image/WT_long_logo.png',
fit: BoxFit.cover,
height: 65.0,
),
],
),
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.white),
onPressed: () =>
{
menuBloc.add(MenuTreeUp(parent: 0))
},
)
);
}
@override
void dispose() {
//sizeController.dispose();
colorController.dispose();
super.dispose();
}
Widget getAnimatedWidget() {
ExerciseRepository exerciseRepository = ExerciseRepository();
exerciseRepository.getExerciseList();
if ( exerciseRepository.exerciseList == null || exerciseRepository.exerciseList.length == 0 ) {
return Stack(
alignment: Alignment.topLeft,
children: [
Text(AppLocalizations.of(context).translate("Make your first test"),
style: TextStyle(fontSize: 16, color: colorAnim.value, shadows: [Shadow(color: Colors.purple , blurRadius: 15)]),
),
//TestProgress(animation: sizeAnim),
]
);
} else {
double percent = 0.61;//exerciseRepository.getBaseExerciseFinishedPercent();
return Stack(
alignment: Alignment.topLeft,
children: [
LinearPercentIndicator(
width: 120.0,
lineHeight: 14.0,
percent: percent,
center: Text(
(percent * 100).toStringAsFixed(0) + "% finished",
style: new TextStyle(fontSize: 12.0),
),
trailing: Icon(percent > 0.6 ? Icons.mood : Icons.mood_bad, color: colorAnim.value,),
linearStrokeCap: LinearStrokeCap.roundAll,
backgroundColor: colorAnim.value,
progressColor: Colors.blue,
animation: true,
),
],
);
}
}
}
+3 -3
View File
@@ -1,7 +1,7 @@
import 'package:aitrainer_app/bloc/session/session_bloc.dart';
import 'package:aitrainer_app/bloc/settings/settings_bloc.dart';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/model/auth.dart';
import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/view/login.dart';
import 'package:aitrainer_app/view/menu_page.dart';
import 'package:aitrainer_app/view/registration.dart';
@@ -69,9 +69,9 @@ class _HomePageState extends State<AitrainerHome> {
return LoadingScreenMain();
} else if (state is SessionReady) {
print("ready");
if (Auth().startPage == 'login') {
if (Cache().startPage == 'login') {
return LoginPage();
} else if (Auth().startPage == 'registration') {
} else if (Cache().startPage == 'registration') {
return RegistrationPage();
} else {
return MenuPage(parent: 0);
+2 -2
View File
@@ -6,8 +6,8 @@ class LoadingScreenMain extends StatelessWidget {
Widget build(BuildContext context) {
Image _backgroundImage = Image.asset('asset/image/WT01_loading_layers.png',
fit: BoxFit.cover,
height: double.infinity,
width: double.infinity,
//height: double.infinity,
//width: double.infinity,
alignment: Alignment.center,
);
return Scaffold(
+7 -4
View File
@@ -2,7 +2,7 @@ import 'dart:ui';
import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/model/auth.dart';
import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/model/workout_tree.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@@ -75,7 +75,7 @@ class MenuPageWidget extends StatelessWidget {
menuBloc.add(MenuTreeDown(parent: workoutTree.id));
} else {
menuBloc.add(MenuClickExercise(exerciseTypeId: workoutTree.id));
if (Auth().userLoggedIn == null) {
if (Cache().userLoggedIn == null) {
Scaffold.of(context).showSnackBar(SnackBar(
backgroundColor: Colors.orange,
content: Text(
@@ -85,6 +85,9 @@ class MenuPageWidget extends StatelessWidget {
if (workoutTree.exerciseType.name == "Custom") {
Navigator.of(context).pushNamed('exerciseCustomPage',
arguments: workoutTree.exerciseType);
} else if (workoutTree.exerciseType.name == "Control") {
Navigator.of(context).pushNamed('exerciseControlPage',
arguments: workoutTree.exerciseType);
} else {
Navigator.of(context).pushNamed('exerciseNewPage',
arguments: workoutTree.exerciseType);
@@ -122,7 +125,7 @@ class MenuPageWidget extends StatelessWidget {
height: 180,
errorBuilder: (context, error, stackTrace) {
String url =
Auth.mediaUrl + 'images/' + workoutTree.imageName.substring(11);
Cache.mediaUrl + 'images/' + workoutTree.imageName.substring(11);
Widget image = FadeInImage.assetNetwork(
placeholder: 'asset/image/dots.gif',
image: url,
@@ -132,7 +135,7 @@ class MenuPageWidget extends StatelessWidget {
},
);
} on Exception catch (_) {
String url = Auth.mediaUrl + '/images/' + workoutTree.imageName;
String url = Cache.mediaUrl + '/images/' + workoutTree.imageName;
image = FadeInImage.assetNetwork(
placeholder: 'asset/image/dots.gif',
image: url,