blob: ab0b11dec364dcc25a60573a02be462a12838b5a [file] [log] [blame]
library card;
import 'package:sky/widgets/basic.dart';
import 'dart:sky' as sky;
import 'package:vector_math/vector_math.dart' as vector_math;
import 'my_button.dart';
class Card {
String deck;
String identifier;
Card(this.deck, this.identifier);
Card.fromString(String data) {
List<String> parts = data.split(" ");
assert(parts.length == 2);
this
..deck = parts[0]
..identifier = parts[1];
}
toString() => "${deck} ${identifier}";
get string => toString();
}
class CardComponent extends StatefulComponent {
// Stateful components
double dx;
double dy;
bool faceUp;
bool scrolling;
final Card card;
final Function pointerUpCb;
static Widget imageFromCard(Card c, bool faceUp) {
String imageName = "${c.deck}/${faceUp ? 'up' : 'down'}/${c.identifier}.png";
return new NetworkImage(src: imageName);
}
CardComponent(this.card, bool faceUp, [this.pointerUpCb = null]) {
this.faceUp = faceUp;
dx = 0.0;
dy = 0.0;
scrolling = false;
}
void syncFields(CardComponent other) {
this.dx = other.dx;
this.dy = other.dy;
this.faceUp = other.faceUp;
}
void _onPressed(sky.Event e) {
setState(() {
this.faceUp = !this.faceUp;
});
}
void _onPointerDown(sky.Event e) {
setState(() {
scrolling = true;
});
}
void _onPointerMove(sky.Event e) {
sky.GestureEvent ge = e as sky.GestureEvent;
setState(() {
dx += ge.dx;
dy += ge.dy;
});
}
void _onPointerUp(sky.Event e) {
//sky.PointerEvent pe = e as sky.PointerEvent;
setState(() {
if (this.pointerUpCb != null) {
pointerUpCb(this.dx, this.dy, this.faceUp);
}
this.dx = 0.0;
this.dy = 0.0;
this.faceUp = true;
scrolling = false;
});
}
Widget build() {
return new Container(
child: /*new Container(
child: */new MyButton(
child: imageFromCard(this.card, faceUp),
onPressed: _onPressed,
onPointerDown: _onPointerDown,
onPointerMove: _onPointerMove,
onPointerUp: _onPointerUp
),
//padding: const EdgeDims.all(8.0),
//margin: const EdgeDims.symmetric(horizontal: 8.0),
decoration: new BoxDecoration(
backgroundColor: (this.scrolling ? const Color(0xFFFF0000) : const Color(0xFF0000FF)),
borderRadius: 5.0
),
transform: new vector_math.Matrix4.identity().translate(dx, dy)
);
}
}
// I think we should be free to move cards around the screen as we please.
// However, that doesn't mean we can tap them willy nilly or let go of them so easily.
// I propose that.
// Card follows you onScroll.
// But onPressed and on