Files
flame/lib/widgets/sprite_button.dart
Erick Zanardo aea3a651cc linting
2020-04-19 15:07:15 -03:00

78 lines
1.7 KiB
Dart

import 'package:flutter/widgets.dart';
import '../sprite.dart';
import 'package:meta/meta.dart';
class SpriteButton extends StatefulWidget {
final VoidCallback onPressed;
final Widget label;
final Sprite sprite;
final Sprite pressedSprite;
final double width;
final double height;
SpriteButton({
@required this.onPressed,
@required this.label,
@required this.sprite,
@required this.pressedSprite,
this.width,
this.height,
});
@override
State createState() => _ButtonState();
}
class _ButtonState extends State<SpriteButton> {
bool _pressed = false;
@override
Widget build(_) {
final width = widget.width ?? 200;
final height = widget.height ?? 50;
return GestureDetector(
onTapDown: (_) {
setState(() {
_pressed = true;
});
},
onTapUp: (_) {
setState(() {
_pressed = false;
});
widget.onPressed?.call();
},
child: Container(
width: width,
height: height,
child: CustomPaint(
painter:
_ButtonPainer(_pressed ? widget.pressedSprite : widget.sprite),
child: Center(
child: Container(
padding: _pressed ? const EdgeInsets.only(top: 5) : null,
child: widget.label,
),
),
),
),
);
}
}
class _ButtonPainer extends CustomPainter {
final Sprite _sprite;
_ButtonPainer(this._sprite);
@override
bool shouldRepaint(_ButtonPainer old) => old._sprite != _sprite;
@override
void paint(Canvas canvas, Size size) {
_sprite.renderRect(canvas, Rect.fromLTWH(0, 0, size.width, size.height));
}
}