sense_the_rythm

rythm game for ESense Earable
git clone git://source.orangerot.dev:/university/sense_the_rythm.git
Log | Files | Refs | README | LICENSE

esense_connect_dialog.dart (2134B)


      1 import 'package:flutter/material.dart';
      2 import 'package:sense_the_rhythm/utils/esense_input.dart';
      3 
      4 class ESenseConnectDialog extends StatefulWidget {
      5   final void Function(String) connect;
      6   final VoidCallback disconnect;
      7   final ValueNotifier<String> deviceStatus;
      8 
      9   const ESenseConnectDialog(
     10       {super.key,
     11       required this.deviceStatus,
     12       required this.connect,
     13       required this.disconnect});
     14 
     15   @override
     16   State<ESenseConnectDialog> createState() => _ESenseConnectDialogState();
     17 }
     18 
     19 class _ESenseConnectDialogState extends State<ESenseConnectDialog> {
     20   String _eSenseDeviceName = '';
     21 
     22   @override
     23   Widget build(BuildContext context) {
     24     // rerender whenever the deviceStatus changes
     25     return ValueListenableBuilder(
     26         valueListenable: widget.deviceStatus,
     27         builder: (BuildContext context, String deviceStatus, Widget? child) {
     28           return AlertDialog(
     29             title: const Text('Connect to ESense'),
     30             content: Column(mainAxisSize: MainAxisSize.min, children: [
     31               TextField(
     32                 onChanged: (input) {
     33                   setState(() {
     34                     _eSenseDeviceName = input;
     35                   });
     36                 },
     37                 decoration: InputDecoration(
     38                   border: OutlineInputBorder(),
     39                   hintText: 'eSense-xxxx',
     40                   labelText: 'Device name',
     41                 ),
     42               ),
     43               // Text(eSenseDeviceName),
     44               Text(deviceStatus)
     45             ]),
     46             actions: <Widget>[
     47               TextButton(
     48                 onPressed: () => Navigator.pop(context, 'Cancel'),
     49                 child: const Text('Close'),
     50               ),
     51               ESenseInput.instance.connected
     52                   ? TextButton(
     53                       onPressed: () => widget.disconnect(),
     54                       child: const Text('Disconnect'),
     55                     )
     56                   : TextButton(
     57                       onPressed: () => widget.connect(_eSenseDeviceName),
     58                       child: const Text('Connect'),
     59                     ),
     60             ],
     61           );
     62         });
     63   }
     64 }