summaryrefslogtreecommitdiff
path: root/lib/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'lib/widgets')
-rw-r--r--lib/widgets/arrow.dart18
-rw-r--r--lib/widgets/arrows.dart24
-rw-r--r--lib/widgets/esense_connect_dialog.dart52
3 files changed, 94 insertions, 0 deletions
diff --git a/lib/widgets/arrow.dart b/lib/widgets/arrow.dart
new file mode 100644
index 0000000..1ad0ec4
--- /dev/null
+++ b/lib/widgets/arrow.dart
@@ -0,0 +1,18 @@
+import 'package:flutter/material.dart';
+import 'package:sense_the_rhythm/models/arrow_direction.dart';
+
+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),
+ );
+ }
+}
diff --git a/lib/widgets/arrows.dart b/lib/widgets/arrows.dart
new file mode 100644
index 0000000..cf04e59
--- /dev/null
+++ b/lib/widgets/arrows.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+import 'package:sense_the_rhythm/models/note.dart';
+import 'package:sense_the_rhythm/widgets/arrow.dart';
+
+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());
+ }
+}
diff --git a/lib/widgets/esense_connect_dialog.dart b/lib/widgets/esense_connect_dialog.dart
new file mode 100644
index 0000000..b598174
--- /dev/null
+++ b/lib/widgets/esense_connect_dialog.dart
@@ -0,0 +1,52 @@
+import 'package:flutter/material.dart';
+
+class ESenseConnectDialog extends StatefulWidget {
+ final void Function(String) connect;
+ final ValueNotifier<String> deviceStatus;
+ const ESenseConnectDialog(
+ {super.key, required this.deviceStatus, required this.connect});
+
+ @override
+ State<ESenseConnectDialog> createState() => _ESenseConnectDialogState();
+}
+
+class _ESenseConnectDialogState extends State<ESenseConnectDialog> {
+ String eSenseDeviceName = '';
+
+ @override
+ Widget build(BuildContext context) {
+ return AlertDialog(
+ title: const Text('Connect to ESense'),
+ content: Column(mainAxisSize: MainAxisSize.min, children: [
+ TextField(
+ onChanged: (input) {
+ setState(() {
+ eSenseDeviceName = input;
+ });
+ },
+ decoration: InputDecoration(
+ border: OutlineInputBorder(),
+ hintText: 'eSense-xxxx',
+ labelText: 'Device name',
+ ),
+ ),
+ // Text(eSenseDeviceName),
+ ValueListenableBuilder(
+ valueListenable: widget.deviceStatus,
+ builder: (BuildContext context, String value, Widget? child) {
+ return Text(value);
+ }),
+ ]),
+ actions: <Widget>[
+ TextButton(
+ onPressed: () => Navigator.pop(context, 'Cancel'),
+ child: const Text('Discard'),
+ ),
+ TextButton(
+ onPressed: () => widget.connect(eSenseDeviceName),
+ child: const Text('Connect'),
+ ),
+ ],
+ );
+ }
+}