diff options
author | uvok | 2025-07-30 13:59:48 +0200 |
---|---|---|
committer | uvok | 2025-07-30 13:59:48 +0200 |
commit | b968fb872d459c37a8e400b7e2d999688728b59b (patch) | |
tree | 20e5a62b5ea4c28e0f8806821074c1e301aa4db5 /lib/scan_page.dart | |
parent | 5e1ec6faca3f89cfb96918c48cb2b1deccac65c5 (diff) |
Clear all hardcoded flutter ble stuff
Diffstat (limited to 'lib/scan_page.dart')
-rw-r--r-- | lib/scan_page.dart | 84 |
1 files changed, 11 insertions, 73 deletions
diff --git a/lib/scan_page.dart b/lib/scan_page.dart index d21ade7..0ebc2e3 100644 --- a/lib/scan_page.dart +++ b/lib/scan_page.dart @@ -1,13 +1,11 @@ -import 'dart:io' show Platform; - import 'package:badge/device_details.dart'; import 'package:badge/device_scan_select.dart'; +import 'package:badge/model/device.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:logger/logger.dart'; import 'package:permission_handler/permission_handler.dart'; -var logger = Logger(printer: PrettyPrinter()); +var logger = Logger(); class ScanPage extends StatefulWidget { const ScanPage({super.key, required this.title}); @@ -21,85 +19,36 @@ class ScanPage extends StatefulWidget { } class _ScanPageState extends State<ScanPage> { - List<ScanResult> scanResults = []; + List<Device> scanResults = []; bool isScanning = false; - ScanResult? selectedDevice; + Device? selectedDevice; void _doConnect() async { - var dev = selectedDevice?.device; + Device? dev = selectedDevice; if (dev == null) return; //??? Navigator.push( context, - MaterialPageRoute( - builder: (context) => DeviceDetailsScreen(btDevice: dev), - ), + MaterialPageRoute(builder: (context) => DeviceDetailsScreen(device: dev)), ); } void _doScan() async { - var system = await FlutterBluePlus.systemDevices([]); - for (var d in system) { - logger.i('${d.platformName} already connected to! ${d.remoteId}'); - } - setState(() { selectedDevice = null; scanResults = []; isScanning = true; }); - var subscription = FlutterBluePlus.scanResults.listen( - onScanResult, - onError: (e) => logger.e(e), - ); - // either this, or the cancel in the finally block, should do the same? - FlutterBluePlus.cancelWhenScanComplete(subscription); - - try { - if (Platform.isAndroid) { - // Ehhhh... can't have both keyword/services - await FlutterBluePlus.startScan( - withKeywords: ["NimBLE"], - timeout: Duration(seconds: 5), - ); - } else { - // for Linux, which can't do advNames (but platformname, for whatever reason) - // msd doesn't work, either???? - await FlutterBluePlus.startScan( - //withMsd: [MsdFilter(0xffff, data: ascii.encode("uvok"))], - timeout: Duration(seconds: 5), - ); - } - // wait for scanning to stop - await FlutterBluePlus.isScanning.where((val) => val == false).first; - } finally { - subscription.cancel(); - setState(() { - isScanning = false; - }); - } - } + // ... + await Future.delayed(Duration(seconds: 5)); - void onScanResult(List<ScanResult> results) { - if (results.isNotEmpty) { - for (var r in results.where( - (d) => d.rssi > -90 && !_deviceInResults(d), - )) { - logger.i( - '${r.device.remoteId}: "${r.device.platformName}" / "${r.device.advName}" / "${r.advertisementData.advName}" found!', - ); - scanResults.add(r); - } - setState(() {}); - } + setState(() { + isScanning = false; + }); } - bool _deviceInResults(ScanResult incomingDev) => scanResults.any( - (existingDev) => existingDev.device.remoteId == incomingDev.device.remoteId, - ); - Future getPermissions() async { try { await Permission.bluetooth.request(); @@ -108,21 +57,10 @@ class _ScanPageState extends State<ScanPage> { } } - void btHandler(BluetoothAdapterState event) { - logger.i(event); - switch (event) { - case BluetoothAdapterState.on: - break; - default: - break; - } - } - @override void initState() { super.initState(); getPermissions(); - FlutterBluePlus.adapterState.listen(btHandler); } @override |