import 'package:flutter/material.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; abstract class NotifyingListWidget extends StatefulWidget { final List items; final ValueChanged onItemSelected; const NotifyingListWidget({ super.key, required this.items, required this.onItemSelected, }); } class DeviceScanSelection extends NotifyingListWidget { const DeviceScanSelection({ super.key, required super.items, required super.onItemSelected, }); @override State createState() => _DeviceScanSelectionState(); } class _DeviceScanSelectionState extends State { int selectedResult = -1; @override Widget build(BuildContext context) { return Expanded( child: ListView.separated( itemCount: widget.items.length, itemBuilder: (context, index) { if (index >= widget.items.length) return null; final ScanResult result = widget.items[index]; final String name = firstGiven([ result.device.advName, result.device.platformName, "", ]); return ListTile( title: Text(name), subtitle: Text(result.device.remoteId.str), trailing: Text('RSSI: ${result.rssi}'), selectedTileColor: Colors.amber, selectedColor: Colors.black, onTap: () { setState(() { selectedResult = index; }); widget.onItemSelected(result); }, selected: selectedResult == index, ); }, separatorBuilder: (BuildContext context, int index) { return Divider(); }, ), ); } } String firstGiven(List list) { return list.firstWhere((s) => s.isNotEmpty, orElse: () => ""); }