summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruvok2025-07-31 14:12:47 +0200
committeruvok2025-07-31 14:12:47 +0200
commitab0aef27c2748bdd89c83f4958d4a02558be4e09 (patch)
tree92cb81331b4b01f40d0b3ed324373b412ea8ec3d
parent67cfa2dc089cfd302570d4b570e0c88cc7d2a087 (diff)
Disable scan with no adapter available
-rw-r--r--lib/widgets/scan_page.dart64
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);
},