Adding SpriteButton

This commit is contained in:
Erick Zanardo
2020-04-19 15:06:54 -03:00
parent 080d2169d3
commit cbf694262b
6 changed files with 115 additions and 1 deletions

View File

@ -70,3 +70,5 @@
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
.flutter-plugins-dependencies .flutter-plugins-dependencies
web

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

View File

@ -0,0 +1,16 @@
//
// Generated file. Do not edit.
//
// ignore: unused_import
import 'dart:ui';
import 'package:audioplayers/audioplayers_web.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
// ignore: public_member_api_docs
void registerPlugins(PluginRegistry registry) {
AudioplayersPlugin.registerWith(registry.registrarFor(AudioplayersPlugin));
registry.registerMessageHandler();
}

View File

@ -1,13 +1,19 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flame/flame.dart'; import 'package:flame/flame.dart';
import 'package:flame/spritesheet.dart';
import 'package:dashbook/dashbook.dart'; import 'package:dashbook/dashbook.dart';
import 'package:flame/widgets/nine_tile_box.dart'; import 'package:flame/widgets/nine_tile_box.dart';
import 'package:flame/widgets/sprite_button.dart';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
final nineTileBoxImage = await Flame.images.load('nine_tile_box.png'); final nineTileBoxImage = await Flame.images.load('nine_tile_box.png');
await Flame.images.load('buttons.png');
final _buttons = SpriteSheet(imageName: 'buttons.png', textureHeight: 20, textureWidth: 60, columns: 1, rows: 2);
final dashbook = Dashbook(); final dashbook = Dashbook();
dashbook.storiesOf('NineTileBox').decorator(CenterDecorator()).add( dashbook.storiesOf('NineTileBox').decorator(CenterDecorator()).add(
@ -30,5 +36,17 @@ void main() async {
), ),
)); ));
dashbook.storiesOf('SpriteButton').decorator(CenterDecorator()).add(
'default',
(ctx) => Container(padding: const EdgeInsets.all(20), child: SpriteButton(
onPressed: () {
print('Pressed');
},
label: const Text('Sprite Button', style: const TextStyle(color: const Color(0xFF5D275D))),
sprite: _buttons.getSprite(0, 0),
pressedSprite: _buttons.getSprite(1, 0),
)),
);
runApp(dashbook); runApp(dashbook);
} }

View File

@ -11,10 +11,11 @@ dependencies:
sdk: flutter sdk: flutter
flame: flame:
path: ../../../ path: ../../../
dashbook: ^0.0.2 dashbook: ^0.0.4
cupertino_icons: ^0.1.2 cupertino_icons: ^0.1.2
flutter: flutter:
uses-material-design: true uses-material-design: true
assets: assets:
- assets/images/nine_tile_box.png - assets/images/nine_tile_box.png
- assets/images/buttons.png

View File

@ -0,0 +1,77 @@
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));
}
}