MIF_E31230988/apk/sen_pt/lib/app/widgets/submitButton.dart

94 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
class SubmitButton extends StatefulWidget {
const SubmitButton({
super.key,
required this.onPressed,
this.label = 'Analisis',
this.colors = const [Color(0xFF6C63FF), Color(0xFF48CAE4)],
});
final VoidCallback onPressed;
final String label;
final List<Color> colors;
@override
State<SubmitButton> createState() => _SubmitButtonState();
}
class _SubmitButtonState extends State<SubmitButton>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _scaleAnim;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 120),
lowerBound: 0.0,
upperBound: 0.05,
);
_scaleAnim = Tween<double>(
begin: 1.0,
end: 0.95,
).animate(CurvedAnimation(parent: _controller, curve: Curves.easeInOut));
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: (_) => _controller.forward(),
onTapUp: (_) {
_controller.reverse();
widget.onPressed();
},
onTapCancel: () => _controller.reverse(),
child: ScaleTransition(
scale: _scaleAnim,
child: Container(
height: 54,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16),
gradient: LinearGradient(
colors: widget.colors,
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
boxShadow: [
BoxShadow(
color: widget.colors.first.withAlpha(80),
blurRadius: 16,
offset: const Offset(0, 6),
),
],
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.analytics_outlined, color: Colors.white, size: 20),
const SizedBox(width: 8),
Text(
widget.label,
style: const TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: 0.5,
),
),
],
),
),
),
);
}
}