diff options
author | uvok | 2025-07-21 18:53:29 +0200 |
---|---|---|
committer | uvok | 2025-07-21 18:53:29 +0200 |
commit | dbf1f754078ceebe532663aa163519de699e5a90 (patch) | |
tree | f194b14d4d20053b33f515067b303721f4e11e70 /lib | |
parent | ae9ef9a1eac773fc2a912f2d9e49905e5f1f2f8d (diff) |
Add second screen?
Diffstat (limited to 'lib')
-rw-r--r-- | lib/device.dart | 30 | ||||
-rw-r--r-- | lib/main.dart | 69 |
2 files changed, 77 insertions, 22 deletions
diff --git a/lib/device.dart b/lib/device.dart new file mode 100644 index 0000000..5f604c8 --- /dev/null +++ b/lib/device.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:logger/logger.dart'; + +var logger = Logger(printer: PrettyPrinter()); + +class Device extends StatelessWidget { + const Device({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp(); + } +} + +class DeviceScreen extends StatefulWidget { + const DeviceScreen({super.key}); + + @override + State<StatefulWidget> createState() { + return DeviceState(); + } +} + +class DeviceState extends State<DeviceScreen> { + @override + Widget build(BuildContext context) { + // TODO: implement build + throw UnimplementedError(); + } +} diff --git a/lib/main.dart b/lib/main.dart index 6ccf64d..f821106 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io' show Platform; +import 'package:badge/device.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -21,7 +22,7 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', + title: 'Scanner', theme: ThemeData( // This is the theme of your application. // @@ -69,7 +70,29 @@ class _MyHomePageState extends State<MyHomePage> { static const int noItemSelected = -1; int selectedResult = noItemSelected; - void _doConnect() {} + void onConnStateChange(BluetoothConnectionState event) { + logger.i("New conn state: ${event.toString()}"); + } + + void _doConnect() async { + var dev = scanResults[selectedResult].device; + var subs = dev.connectionState.listen(onConnStateChange); + try { + logger.i("Try to connect..."); + await dev.connect(); + logger.i("Connected!"); + await dev.disconnect(); + logger.i("Disonnected!"); + } finally { + subs.cancel(); + } + + //??? + // Navigator.push( + // context, + // MaterialPageRoute(builder: (context) => DeviceScreen()), + // ); + } void _doScan() async { setState(() { @@ -83,27 +106,29 @@ class _MyHomePageState extends State<MyHomePage> { ); // Ehhhh... can't have both - if (Platform.isAndroid) { - await FlutterBluePlus.startScan( - withKeywords: ["NimBLE"], - timeout: Duration(seconds: 5), - ); - } else { - // for Linux, which can't do advNames - // 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; + try { + if (Platform.isAndroid) { + await FlutterBluePlus.startScan( + withKeywords: ["NimBLE"], + timeout: Duration(seconds: 5), + ); + } else { + // for Linux, which can't do advNames + // msd doesn't work, either???? + await FlutterBluePlus.startScan( + withMsd: [MsdFilter(0xffff, data: ascii.encode("uvok"))], + timeout: Duration(seconds: 5), + ); + } - subscription.cancel(); - setState(() { - isScanning = false; - }); + // wait for scanning to stop + await FlutterBluePlus.isScanning.where((val) => val == false).first; + } finally { + subscription.cancel(); + setState(() { + isScanning = false; + }); + } } void onScanResult(results) { |