// Copyright (C) 2025, uvok cheetah // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'package:uvok_epaper_badge/model/device/device.dart'; import 'package:flutter/material.dart'; import 'package:uvok_epaper_badge/widgets/notifying_list_widget.dart'; 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 Device result = widget.items[index]; final String name = result.name ?? "???"; return ListTile( title: Text(name), subtitle: Text(result.address ?? "???"), 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(); }, ), ); } @override void didUpdateWidget(covariant DeviceScanSelection oldWidget) { super.didUpdateWidget(oldWidget); if (!_deviceListEqual(oldWidget.items, widget.items)) { setState(() { selectedResult = -1; }); } } bool _deviceListEqual(List oldList, List newList) { if (oldList.length != newList.length) return false; for (int i = 0; i < oldList.length; i++) { if (oldList[i].address != newList[i].address) { return false; } } return true; } }