import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:stackwallet/providers/ui/color_theme_provider.dart'; import 'package:stackwallet/utilities/text_styles.dart'; class BlueTextButton extends ConsumerStatefulWidget { const BlueTextButton({Key? key, required this.text, this.onTap}) : super(key: key); final String text; final VoidCallback? onTap; @override ConsumerState createState() => _BlueTextButtonState(); } class _BlueTextButtonState extends ConsumerState with SingleTickerProviderStateMixin { late AnimationController controller; late Animation animation; late Color color; @override void initState() { color = ref.read(colorThemeProvider.state).state.buttonTextBorderless; controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 100), ); animation = ColorTween( begin: ref.read(colorThemeProvider.state).state.buttonTextBorderless, end: ref .read(colorThemeProvider.state) .state .buttonTextBorderless .withOpacity(0.4), ).animate(controller); animation.addListener(() { setState(() { color = animation.value as Color; }); }); super.initState(); } @override void dispose() { controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return RichText( textAlign: TextAlign.center, text: TextSpan( text: widget.text, style: STextStyles.link2(context).copyWith(color: color), recognizer: TapGestureRecognizer() ..onTap = () { widget.onTap?.call(); controller.forward().then((value) => controller.reverse()); }, ), ); } }