Files
YungR1otz/lib/core/widgets/riotz_button.dart
Lucas Saburido cabf2025cd first commit
2026-05-13 16:26:45 +01:00

77 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import '../theme/app_colors.dart';
enum RiotzButtonStyle { primary, secondary, outline }
class RiotzButton extends StatelessWidget {
const RiotzButton({
required this.label,
required this.onPressed,
this.style = RiotzButtonStyle.primary,
this.isLoading = false,
this.fullWidth = true,
super.key,
});
final String label;
final VoidCallback? onPressed;
final RiotzButtonStyle style;
final bool isLoading;
final bool fullWidth;
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
Widget content = isLoading
? const SizedBox(
height: 20,
width: 20,
child: CircularProgressIndicator(strokeWidth: 2, color: AppColors.white),
)
: Text(label.toUpperCase(), style: theme.textTheme.labelLarge);
if (fullWidth) {
content = Center(child: content);
}
return InkWell(
onTap: isLoading ? null : onPressed,
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 24),
decoration: BoxDecoration(
color: _getBgColor(),
border: Border.all(
color: _getBorderColor(),
width: 2,
),
),
child: content,
),
);
}
Color _getBgColor() {
switch (style) {
case RiotzButtonStyle.primary:
return AppColors.neonRed;
case RiotzButtonStyle.secondary:
return AppColors.bloodRed;
case RiotzButtonStyle.outline:
return Colors.transparent;
}
}
Color _getBorderColor() {
switch (style) {
case RiotzButtonStyle.primary:
return AppColors.neonRed;
case RiotzButtonStyle.secondary:
return AppColors.bloodRed;
case RiotzButtonStyle.outline:
return AppColors.white;
}
}
}