diff options
author | uvok | 2025-07-22 17:23:14 +0200 |
---|---|---|
committer | uvok | 2025-07-22 17:23:14 +0200 |
commit | 38d7bab06a3b776d6e3410a10d5fa2bada95866c (patch) | |
tree | fe74e0999414e2a24dcd4ccefc42e72d02071fd8 | |
parent | f607bcb9948545c860b988e9d0405743b02b4266 (diff) |
Replace custom list by widgetmain
-rw-r--r-- | lib/main.dart | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/lib/main.dart b/lib/main.dart index f04c381..476d6a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'dart:io' show Platform; import 'package:badge/device.dart'; +import 'package:badge/device_scan_select.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -67,11 +68,12 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State<MyHomePage> { final List<ScanResult> scanResults = []; bool isScanning = false; - static const int noItemSelected = -1; - int selectedResult = noItemSelected; + + ScanResult? selectedDevice; void _doConnect() async { - var dev = scanResults[selectedResult].device; + var dev = selectedDevice?.device; + if (dev == null) return; //??? Navigator.push( context, @@ -91,7 +93,7 @@ class _MyHomePageState extends State<MyHomePage> { setState(() { scanResults.clear(); isScanning = true; - selectedResult = noItemSelected; + setState(() {}); }); var subscription = FlutterBluePlus.onScanResults.listen( onScanResult, @@ -127,7 +129,11 @@ class _MyHomePageState extends State<MyHomePage> { void onScanResult(List<ScanResult> results) { if (results.isNotEmpty) { //ScanResult r = results.last; // the most recently found device - for (var r in results.where((d) => d.rssi > -90)) { + for (var r in results.where( + (d) => + d.rssi > -90 && + !scanResults.any((ed) => ed.device.remoteId == d.device.remoteId), + )) { logger.i( '${r.device.remoteId}: "${r.device.platformName}" / "${r.device.advName}" / "${r.advertisementData.advName}" found!', ); @@ -210,7 +216,7 @@ class _MyHomePageState extends State<MyHomePage> { child: isScanning ? Text("Scanning...") : Text("Start scan"), ), ElevatedButton( - onPressed: (selectedResult == noItemSelected || isScanning) + onPressed: (selectedDevice == null || isScanning) ? null : _doConnect, child: Text("Connect"), @@ -218,33 +224,10 @@ class _MyHomePageState extends State<MyHomePage> { ], ), Expanded( - child: ListView.separated( - itemCount: scanResults.length, - itemBuilder: (context, index) { - if (index >= scanResults.length) return null; - final ScanResult result = scanResults[index]; - final String name = firstGiven([ - result.device.advName, - result.device.platformName, - "<Unknown>", - ]); - - return ListTile( - title: Text(name), - subtitle: Text(result.device.remoteId.str), - trailing: Text('RSSI: ${result.rssi}'), - selectedTileColor: Colors.amber, - selectedColor: Colors.black, - onTap: () { - setState(() { - selectedResult = index; - }); - }, - selected: selectedResult == index, - ); - }, - separatorBuilder: (BuildContext context, int index) { - return Divider(); + child: DeviceScanSelection( + items: scanResults, + onItemSelected: (item) { + setState(() => selectedDevice = item); }, ), ), |