diff options
Diffstat (limited to 'lib/widgets')
| -rw-r--r-- | lib/widgets/arrow.dart | 18 | ||||
| -rw-r--r-- | lib/widgets/arrows.dart | 24 | ||||
| -rw-r--r-- | lib/widgets/esense_connect_dialog.dart | 52 | 
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'), +        ), +      ], +    ); +  } +} | 
