summaryrefslogtreecommitdiff
path: root/lib/main.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/main.dart')
-rw-r--r--lib/main.dart49
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);
},
),
),