counter animation added.

design_3.0_TM_Module_snagsFix
Sikander Saleem 2 months ago
parent 328b2fe48d
commit 23e7550212

@ -0,0 +1,40 @@
import 'package:flutter/material.dart';
class CounterAnimatedText extends ImplicitlyAnimatedWidget {
final int value;
final TextStyle? style;
const CounterAnimatedText({
super.key,
super.duration = const Duration(milliseconds: 750),
required this.value,
this.style,
});
@override
ImplicitlyAnimatedWidgetState<CounterAnimatedText> createState() => _CounterTextState();
}
class _CounterTextState extends AnimatedWidgetBaseState<CounterAnimatedText> {
late IntTween _counter;
@override
void initState() {
_counter = IntTween(begin: widget.value, end: widget.value);
super.initState();
}
@override
Widget build(BuildContext context) {
return Text('${_counter.evaluate(animation)}', style: widget.style);
}
@override
void forEachTween(TweenVisitor<dynamic> visitor) {
_counter = visitor(
_counter,
widget.value,
(dynamic value) => IntTween(begin: value),
) as IntTween;
}
}

@ -213,7 +213,7 @@ class ProgressFragment extends StatelessWidget {
children: [ children: [
PieChart( PieChart(
dataMap: {for (var v in chartData) v.x: v.y}, dataMap: {for (var v in chartData) v.x: v.y},
animationDuration: const Duration(milliseconds: 800), animationDuration: const Duration(milliseconds: 750),
chartLegendSpacing: 32, chartLegendSpacing: 32,
chartRadius: MediaQuery.of(context).size.width / 3.2, chartRadius: MediaQuery.of(context).size.width / 3.2,
colorList: chartData.map((element) => element.color).toList(), colorList: chartData.map((element) => element.color).toList(),

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/animations/number_incremental_animation.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
class CustomBadge extends StatelessWidget { class CustomBadge extends StatelessWidget {
@ -19,22 +20,25 @@ class CustomBadge extends StatelessWidget {
clipBehavior: Clip.none, // Allows the badge to overflow its container. clipBehavior: Clip.none, // Allows the badge to overflow its container.
children: [ children: [
child, // The main widget child, // The main widget
if (value > 0) // if (value > 0)
Positioned( Positioned(
right: -6, right: -6,
top: -6, top: -6,
child: Opacity(
opacity: value > 0 ? 1 : 0,
child: Container( child: Container(
height: 23, height: 23,
constraints: const BoxConstraints(minWidth: 23), constraints: const BoxConstraints(minWidth: 23),
padding: const EdgeInsets.all(3), padding: const EdgeInsets.all(3),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration(color: color, borderRadius: BorderRadius.circular(30)), decoration: BoxDecoration(color: color, borderRadius: BorderRadius.circular(30)),
child: Text( child: CounterAnimatedText(
value.toString(), value: value,
style: const TextStyle(color: AppColor.white10, fontFamily: 'Poppins', fontSize: 10, fontWeight: FontWeight.w700), style: const TextStyle(color: AppColor.white10, fontFamily: 'Poppins', fontSize: 10, fontWeight: FontWeight.w700),
), ),
), ),
), ),
),
], ],
); );
} }

Loading…
Cancel
Save