import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:aves/widgets/common/fx/borders.dart'; import 'package:flutter/material.dart'; const kOverlayBackgroundColor = Colors.black26; class OverlayButton extends StatelessWidget { final Animation scale; final Widget child; const OverlayButton({ Key key, @required this.scale, @required this.child, }) : assert(scale != null), super(key: key); @override Widget build(BuildContext context) { return ScaleTransition( scale: scale, child: BlurredOval( child: Material( type: MaterialType.circle, color: kOverlayBackgroundColor, child: Ink( decoration: BoxDecoration( border: AvesCircleBorder.build(context), shape: BoxShape.circle, ), child: child, ), ), ), ); } } class OverlayTextButton extends StatelessWidget { final Animation scale; final String text; final VoidCallback onPressed; const OverlayTextButton({ Key key, @required this.scale, @required this.text, this.onPressed, }) : assert(scale != null), super(key: key); static const _borderRadius = 123.0; static final _minSize = MaterialStateProperty.all(Size(kMinInteractiveDimension, kMinInteractiveDimension)); @override Widget build(BuildContext context) { return SizeTransition( sizeFactor: scale, child: BlurredRRect( borderRadius: _borderRadius, child: OutlinedButton( onPressed: onPressed, style: ButtonStyle( backgroundColor: MaterialStateProperty.all(kOverlayBackgroundColor), foregroundColor: MaterialStateProperty.all(Colors.white), overlayColor: MaterialStateProperty.all(Colors.white.withOpacity(0.12)), minimumSize: _minSize, side: MaterialStateProperty.all(AvesCircleBorder.buildSide(context)), shape: MaterialStateProperty.all(RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(_borderRadius)), )), // shape: MaterialStateProperty.all(CircleBorder()), ), child: Text(text.toUpperCase()), ), ), ); } }