import 'dart:async'; import 'package:aitrainer_app/localization/app_localization.dart'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/repository/exercise_repository.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:rainbow_color/rainbow_color.dart'; class AppBarCommonNav extends StatefulWidget implements PreferredSizeWidget { @override _AppBarCommonNav createState() => _AppBarCommonNav(); @override Size get preferredSize => const Size.fromHeight(60); } class _AppBarCommonNav extends State with SingleTickerProviderStateMixin { Animation colorAnim; AnimationController colorController; @override void initState() { colorController = AnimationController(duration: Duration(seconds: 4), vsync: this); colorAnim = RainbowColorTween([Colors.white70, Colors.blueGrey, Colors.blueAccent, Colors.lightBlue, Colors.lightBlueAccent, Colors.yellowAccent, Colors.orange, Colors.orangeAccent, Colors.yellowAccent, Color(0xffcce6ff)]) .animate(colorController) ..addListener(() { setState(() {}); }) ..addStatusListener((status) { if (status == AnimationStatus.completed) { Timer(Duration(seconds: 10), () { //colorController.reset(); if ( mounted ) { colorController.forward(); } }); } else if (status == AnimationStatus.dismissed) { colorController.forward(); } }); colorController.forward(); super.initState(); } @override Widget build(BuildContext context) { return AppBar( backgroundColor: Colors.black, title: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ 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: () => { Navigator.of(context).pop() }, ) ); } @override void dispose() { //sizeController.dispose(); colorController.dispose(); super.dispose(); } Widget getAnimatedWidget() { double percent = Cache().getPercentExercises(); if ( percent == -1) { ExerciseRepository exerciseRepository = ExerciseRepository(); exerciseRepository.getBaseExerciseFinishedPercent(); percent = Cache().getPercentExercises(); } int sizeExerciseList = Cache().getExercises() == null? 0 : Cache().getExercises().length; if ( sizeExerciseList == 0 ) { String text = AppLocalizations.of(context).translate("Make your first test"); double fontSize = text.length > 17 ? 10 : 16; return Stack( alignment: Alignment.topLeft, children: [ Text(text, style: TextStyle(fontSize: fontSize, color: colorAnim.value, shadows: [Shadow(color: Colors.purple , blurRadius: 15)]), ), //TestProgress(animation: sizeAnim), ] ); } else { 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: Color(0xff73e600), animation: true, ), ], ); } } }