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 }