workouttest_app/lib/widgets/app_bar_progress.dart
2021-04-19 00:16:07 +02:00

79 lines
2.3 KiB
Dart

import 'package:aitrainer_app/bloc/timer/timer_bloc.dart';
import 'package:aitrainer_app/util/common.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:aitrainer_app/library/liquid_progress_indicator/liquid_linear_progress_indicator.dart';
class AppBarProgress extends StatefulWidget implements PreferredSizeWidget {
final int max;
final int min;
const AppBarProgress({required this.max, required this.min});
@override
_AppBarNav createState() => _AppBarNav();
@override
Size get preferredSize => const Size.fromHeight(50);
}
class _AppBarNav extends State<AppBarProgress> with SingleTickerProviderStateMixin, Common {
late AnimationController _animationController;
@override
void initState() {
_animationController = AnimationController(
lowerBound: (widget.min).toDouble(),
upperBound: (widget.max).toDouble(),
vsync: this,
duration: Duration(seconds: 3),
);
_animationController.addListener(() => setState(() {}));
_animationController.forward();
super.initState();
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// ignore: close_sinks
final TimerBloc timerBloc = BlocProvider.of<TimerBloc>(context);
return AppBar(
backgroundColor: Colors.black,
title: getAnimatedWidget(),
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.white),
onPressed: () => {timerBloc.add(TimerEnd(duration: 0)), Navigator.of(context).pop()},
));
}
Widget getAnimatedWidget() {
final percentage = _animationController.value;
return Container(
width: double.infinity,
height: 35,
padding: EdgeInsets.symmetric(horizontal: 24.0),
child: LiquidLinearProgressIndicator(
value: _animationController.value / 100,
backgroundColor: Colors.black,
valueColor: AlwaysStoppedAnimation(Color(0xffb4f500)),
borderRadius: 12.0,
center: Text(
"${percentage.toStringAsFixed(0)}%",
style: TextStyle(
color: Colors.yellow[50],
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
));
}
}