diff options
author | uvok | 2025-07-31 14:12:47 +0200 |
---|---|---|
committer | uvok | 2025-07-31 14:12:47 +0200 |
commit | ab0aef27c2748bdd89c83f4958d4a02558be4e09 (patch) | |
tree | 92cb81331b4b01f40d0b3ed324373b412ea8ec3d | |
parent | 67cfa2dc089cfd302570d4b570e0c88cc7d2a087 (diff) |
Disable scan with no adapter available
-rw-r--r-- | lib/widgets/scan_page.dart | 64 |
1 files changed, 41 insertions, 23 deletions
diff --git a/lib/widgets/scan_page.dart b/lib/widgets/scan_page.dart index dbc64dc..0280889 100644 --- a/lib/widgets/scan_page.dart +++ b/lib/widgets/scan_page.dart @@ -96,36 +96,54 @@ class _ScanPageState extends State<ScanPage> { children: <Widget>[ SizedBox(height: 15), StreamBuilder( - stream: widget.deviceScanner.statusStream, - initialData: ScanStatus.idle, - builder: (context, asyncSnapshot) { - bool isScanning = asyncSnapshot.data == ScanStatus.scanning; - return Row( - mainAxisAlignment: MainAxisAlignment.center, - spacing: 15.0, - children: [ - ElevatedButton( - onPressed: isScanning ? null : _doScan, - child: isScanning - ? Text("Scanning...") - : Text("Start scan"), - ), - ElevatedButton( - onPressed: (selectedDevice == null || isScanning) - ? null - : _doConnect, - child: Text("Connect"), - ), - ], + stream: widget.deviceScanner.availabilityStream, + builder: (saCtx, scanAvailability) { + return StreamBuilder( + stream: widget.deviceScanner.statusStream, + initialData: ScanStatus.idle, + builder: (ssCtx, scanStatus) { + final bool isScanning = + scanStatus.data == ScanStatus.scanning; + final bool scanAvailable = + scanAvailability.data == ScanAvailability.available; + final bool allowConnect = + selectedDevice == null || isScanning || !scanAvailable; + + Text scanBtn; + if (!scanAvailable) { + scanBtn = Text("No available adapter."); + } else if (isScanning) { + scanBtn = Text("Scanning..."); + } else { + scanBtn = Text("Start scan"); + } + + return Row( + mainAxisAlignment: MainAxisAlignment.center, + spacing: 15.0, + children: [ + ElevatedButton( + onPressed: isScanning || !scanAvailable + ? null + : _doScan, + child: scanBtn, + ), + ElevatedButton( + onPressed: allowConnect ? null : _doConnect, + child: Text("Connect"), + ), + ], + ); + }, ); }, ), StreamBuilder( stream: widget.deviceScanner.scanResultsStream, initialData: <Device>[], - builder: (context, asyncSnapshot) { + builder: (srCtx, scanResults) { return DeviceScanSelection( - items: asyncSnapshot.data ?? [], + items: scanResults.data ?? [], onItemSelected: (item) { setState(() => selectedDevice = item); }, |