68 lines
1.4 KiB
Dart
68 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
|
|
class FontConstants {
|
|
static const String fontFamily = 'Proxima Nova';
|
|
}
|
|
|
|
|
|
class ZoomIconButton extends StatefulWidget {
|
|
final VoidCallback onTap;
|
|
final IconData icon;
|
|
final double size;
|
|
final Color color;
|
|
|
|
const ZoomIconButton({
|
|
Key? key,
|
|
required this.onTap,
|
|
this.icon = Icons.more_vert,
|
|
this.size = 24,
|
|
this.color = Colors.black,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
State<ZoomIconButton> createState() => _ZoomIconButtonState();
|
|
}
|
|
|
|
class _ZoomIconButtonState extends State<ZoomIconButton> {
|
|
double _scale = 1.0;
|
|
|
|
void _onTapDown(TapDownDetails details) {
|
|
setState(() {
|
|
_scale = 1.2; // zoom in
|
|
});
|
|
}
|
|
|
|
void _onTapUp(TapUpDetails details) {
|
|
setState(() {
|
|
_scale = 1.0; // zoom back
|
|
});
|
|
widget.onTap(); // trigger your action
|
|
}
|
|
|
|
void _onTapCancel() {
|
|
setState(() {
|
|
_scale = 1.0; // reset if cancelled
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GestureDetector(
|
|
onTapDown: _onTapDown,
|
|
onTapUp: _onTapUp,
|
|
onTapCancel: _onTapCancel,
|
|
child: AnimatedScale(
|
|
scale: _scale,
|
|
duration: const Duration(milliseconds: 100),
|
|
curve: Curves.easeInCirc,
|
|
child: Icon(
|
|
widget.icon,
|
|
size: widget.size,
|
|
color: widget.color,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|