Rifinire con badge visivi di feedback
Per un tocco professionale, mostriamo un badge "LIKE" o "NOPE" che appare gradualmente mentre si trascina. Il cardBuilder fornisce horizontalOffsetPercentage (percentX), un valore da -100 a 100 che indica quanto la card è stata trascinata orizzontalmente: lo usiamo per calcolare l'opacità del badge.
cardBuilder: (context, index, percentX, percentY) {
final likeOpacity = (percentX / 100).clamp(0.0, 1.0);
final nopeOpacity = (-percentX / 100).clamp(0.0, 1.0);
return Stack(
children: [
ProfileCardView(card: demoCards[index]),
Positioned(
top: 24, left: 24,
child: Opacity(
opacity: likeOpacity,
child: _Badge(text: 'LIKE', color: Colors.green),
),
),
Positioned(
top: 24, right: 24,
child: Opacity(
opacity: nopeOpacity,
child: _Badge(text: 'NOPE', color: Colors.red),
),
),
],
);
}
class _Badge extends StatelessWidget {
final String text;
final Color color;
const _Badge({required this.text, required this.color});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
decoration: BoxDecoration(
border: Border.all(color: color, width: 3),
borderRadius: BorderRadius.circular(8),
),
child: Text(text,
style: TextStyle(color: color, fontSize: 24, fontWeight: FontWeight.bold),
),
);
}
}
Risultato atteso
Trascinando la card verso destra appare il badge LIKE, verso sinistra il badge NOPE, con opacità proporzionale al trascinamento.