Files

65 lines
1.6 KiB
Dart
Raw Permalink Normal View History

2025-07-10 18:52:04 -05:00
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<ScanResultTile> createState() => _ScanResultTileState();
}
class _ScanResultTileState extends State<ScanResultTile> {
BluetoothConnectionState _connectionState = BluetoothConnectionState.disconnected;
late StreamSubscription<BluetoothConnectionState> _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,
)
);
}
}