build method
Override this method to build widgets that depend on the state of the listenable (e.g., the current value of the animation).
Implementation
@override
Widget build(BuildContext context) {
return Material(
color: Colors.white,
child: Stack(
children: [
if (animation.value > 0)
SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Align(
alignment: Alignment.bottomCenter,
child: CustomPaint(
foregroundPainter: _CustomAnimationPainter(
animation: animation,
color: color,
),
child: const SizedBox(
height: 150,
width: 150,
),
),
),
),
const SizedBox(height: 60),
Expanded(
child: TweenAnimationBuilder(
tween: Tween(begin: 0.0, end: 1.0),
duration: const Duration(milliseconds: 400),
builder: (_, double value, child) {
return Opacity(
opacity: value,
child: Transform.translate(
offset: Offset(0.0, 50 * (1 - value)),
child: child,
),
);
},
child: Column(
children: [
if (title.isNotEmpty)
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20),
child: Text(
title,
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.w500,
color: titleColor,
),
textAlign: TextAlign.center,
overflow: TextOverflow.visible,
),
),
const Spacer(),
if (showButton)
OutlinedButton(
style: OutlinedButton.styleFrom(
side: BorderSide(
color: buttonBorderColor ?? textColor,
),
),
onPressed: onButtonPressed ??
() => Navigator.of(context).pop(),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 20.0,
horizontal: 40,
),
child: Text(
buttonText,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: textColor,
),
),
),
),
const SizedBox(height: 70),
],
),
),
),
],
),
),
],
),
);
}