import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; class ScanResultTile extends StatefulWidget { const ScanResultTile({super.key, required this.result, this.onTap}); final ScanResult result; final VoidCallback? onTap; @override State createState() => _ScanResultTileState(); } class _ScanResultTileState extends State { BluetoothConnectionState _connectionState = BluetoothConnectionState.disconnected; late StreamSubscription _connectionStateSubscription; @override void initState() { super.initState(); _connectionStateSubscription = widget.result.device.connectionState.listen((state) { _connectionState = state; if (mounted) { setState(() {}); } }); } @override void dispose() { _connectionStateSubscription.cancel(); super.dispose(); } bool get isConnected { return _connectionState == BluetoothConnectionState.connected; } Widget _buildTitle(BuildContext context) { return Text( widget.result.advertisementData.advName, overflow: TextOverflow.ellipsis, ); } @override Widget build(BuildContext context) { return Card( child: ListTile( title: _buildTitle(context), subtitle: Text( "Signal Strength (Less = farther): ${widget.result.rssi}", overflow: TextOverflow.ellipsis, ), trailing: Icon(Icons.arrow_forward_ios_rounded), onTap: widget.result.advertisementData.connectable ? widget.onTap : null, ) ); } }