import 'package:flutter/material.dart'; import '../../Entities/list_item.dart'; /// Eine editierbare Liste mit Funktionen zur Bearbeitung class EditableList extends StatelessWidget { /// Erstellt eine neue Instanz dieser Klasse const EditableList({ required this.name, required this.items, required this.onAdd, required this.onEdit, required this.onDelete, this.icon, this.addTooltip, this.menuTooltip, super.key, }); /// Der Name, der oben angezeigt wird final String name; /// Die final List items; /// Die Funktion, die aufgerufen wird, /// wenn ein neuer Eintrag hinzugefügt werden soll final void Function() onAdd; /// Die Funktion, die beim umbenennen aufgerufen wird final void Function(int) onEdit; ///Die Funktion, die beim Löschen aufgerufen wird final void Function(int) onDelete; /// Das Icon, das angezeigt wird final Icon? icon; /// Der Tooltip, der beim erstellen-Button angezeigt wird final String? addTooltip; /// Der Tooltip, der auf dem Menü angezeigt wird final String? menuTooltip; @override Widget build(final BuildContext context) => Expanded( child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( name, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), IconButton( onPressed: onAdd, icon: const Icon(Icons.add), tooltip: addTooltip, ), ], ), const SizedBox(height: 8), Expanded( child: ListView.separated( itemCount: items.length, separatorBuilder: (_, _) => const Divider(), itemBuilder: (final context, final index) => ListTile( contentPadding: EdgeInsets.zero, title: Text(items[index].name), leading: icon, trailing: PopupMenuButton( tooltip: menuTooltip, onSelected: (final value) { if (value == 'edit') { onEdit(items[index].id); } else if (value == 'delete') { onDelete(items[index].id); } }, itemBuilder: (_) => const [ PopupMenuItem(value: 'edit', child: Text('Bearbeiten')), PopupMenuItem(value: 'delete', child: Text('Entfernen')), ], ), ), ), ), ], ), ); }