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:logger/logger.dart'; import 'package:permission_handler/permission_handler.dart'; var logger = Logger(); class ScanPage extends StatefulWidget { const ScanPage({super.key, required this.title}); // Original doc: Fields in a Widget subclass are always marked "final". final String title; @override State createState() => _ScanPageState(); } class _ScanPageState extends State { List scanResults = []; bool isScanning = false; Device? selectedDevice; void _doConnect() async { Device? dev = selectedDevice; if (dev == null) return; //??? Navigator.push( context, MaterialPageRoute(builder: (context) => DeviceDetailsScreen(device: dev)), ); } void _doScan() async { setState(() { selectedDevice = null; scanResults = []; isScanning = true; }); // ... await Future.delayed(Duration(seconds: 5)); setState(() { isScanning = false; }); } Future getPermissions() async { try { await Permission.bluetooth.request(); } catch (e) { logger.e(e.toString()); } } @override void initState() { super.initState(); getPermissions(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: Column( // TRY THIS: Invoke "debug painting" (choose the "Toggle Debug Paint" // action in the IDE, or press "p" in the console), to see the // wireframe for each widget. mainAxisAlignment: MainAxisAlignment.center, spacing: 24, children: [ SizedBox(height: 15), Row( mainAxisAlignment: MainAxisAlignment.center, spacing: 15.0, children: [ ElevatedButton( onPressed: isScanning ? null : _doScan, child: isScanning ? Text("Scanning...") : Text("Start scan"), ), ElevatedButton( onPressed: (selectedDevice == null || isScanning) ? null : _doConnect, child: Text("Connect"), ), ], ), Expanded( child: DeviceScanSelection( items: scanResults, onItemSelected: (item) { setState(() => selectedDevice = item); }, ), ), ], ), ), ); } }