58 lines
1.3 KiB
Dart
58 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
enum ArrowDirection {
|
|
left(Icons.arrow_back),
|
|
down(Icons.arrow_downward),
|
|
up(Icons.arrow_upward),
|
|
right(Icons.arrow_forward);
|
|
|
|
const ArrowDirection(this.icon);
|
|
|
|
final IconData icon;
|
|
}
|
|
|
|
class Note {
|
|
final double time;
|
|
final ArrowDirection direction;
|
|
double position = 0;
|
|
bool wasHit = false;
|
|
|
|
Note({required this.time, required this.direction});
|
|
}
|
|
|
|
class Arrows extends StatelessWidget {
|
|
final List<Note> notes;
|
|
final double position;
|
|
|
|
const Arrows({super.key, required this.notes, required this.position});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Stack(
|
|
children: notes.map((note) {
|
|
double position = note.position * 10000; // * 20 * MediaQuery.of(context).size.height;
|
|
|
|
return Arrow(
|
|
position: position,
|
|
direction: note.direction,
|
|
);
|
|
}).toList());
|
|
}
|
|
}
|
|
|
|
class Arrow extends StatelessWidget {
|
|
final double position;
|
|
final ArrowDirection direction;
|
|
|
|
const Arrow({super.key, required this.position, required this.direction});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Positioned(
|
|
left: MediaQuery.of(context).size.width / 2 - 50, // Center the arrow
|
|
bottom: position + 50,
|
|
child: Icon(size: 100, color: Colors.redAccent.shade400, direction.icon),
|
|
);
|
|
}
|
|
}
|