I want to create a button that displays a border while being pressed.
However, I want to control whether the border is shown or hidden using AnimatedOpacity, but the button itself becomes hidden.
How can I make the button itself visible all the time, but only the border can be controlled by AnimatedOpacity?
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
class AppAnimatedButton extends HookWidget {
const AppAnimatedButton({
required double borderRadius,
required Future<void> Function() onTap,
bool? isSecondFlameBorder,
super.key,
}) : _borderRadius = borderRadius,
_isSecondFlameBorder = isSecondFlameBorder ?? false,
_onTap = onTap;
final bool _isSecondFlameBorder;
final double _borderRadius;
final Future<void> Function() _onTap;
@override
Widget build(BuildContext context) {
final isTapDowning = useState(false);
const radius = 10.0;
return GestureDetector(
onTapCancel: () => isTapDowning.value = false,
onTapDown: (_) => isTapDowning.value = true,
onTapUp: (_) async {
isTapDowning.value = false;
_onTap();
},
child: AnimatedOpacity(
opacity: isTapDowning.value ? 1 : 0,
curve: Curves.easeIn,
duration: const Duration(milliseconds: 400),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: _isSecondFlameBorder && isTapDowning.value
? Colors.blue
: Colors.transparent,
width: 4,
),
borderRadius: BorderRadius.circular(_borderRadius * 1.55),
),
child: Container(
width: 100,
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(radius),
color: Colors.yellow,
),
),
),
),
);
}
}
For reference, I wanted to create an animation like this for the Amazon app.

You can remove the
AnimatedOpacitywidget that is wrapping the firstContainer, and change thatContainertoAnimatedContainer. Use the samecurveanddurationthat was on theAnimatedOpacitybefore to theAnimatedContainer.