From ab0aef27c2748bdd89c83f4958d4a02558be4e09 Mon Sep 17 00:00:00 2001 From: uvok Date: Thu, 31 Jul 2025 14:12:47 +0200 Subject: Disable scan with no adapter available --- lib/widgets/scan_page.dart | 64 +++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 23 deletions(-) (limited to 'lib/widgets') 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 { children: [ 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: [], - builder: (context, asyncSnapshot) { + builder: (srCtx, scanResults) { return DeviceScanSelection( - items: asyncSnapshot.data ?? [], + items: scanResults.data ?? [], onItemSelected: (item) { setState(() => selectedDevice = item); }, -- cgit v1.2.3