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 /lib | |
| parent | f607bcb9948545c860b988e9d0405743b02b4266 (diff) | |
Replace custom list by widget
Diffstat (limited to 'lib')
| -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);                  },                ),              ), | 
