import 'package:flutter/material.dart'; class AdminDetailField { final String label; final String value; const AdminDetailField({ required this.label, required this.value, }); } class AdminDetailModal extends StatelessWidget { final String title; final String? subtitle; final List fields; final VoidCallback onEdit; final VoidCallback onDelete; const AdminDetailModal({ super.key, required this.title, this.subtitle, required this.fields, required this.onEdit, required this.onDelete, }); @override Widget build(BuildContext context) { return Dialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 620), child: Padding( padding: const EdgeInsets.all(18), child: Column( mainAxisSize: MainAxisSize.min, children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700, ), ), if (subtitle != null && subtitle!.isNotEmpty) ...[ const SizedBox(height: 4), Text( subtitle!, style: const TextStyle(color: Colors.black54), ), ], ], ), ), IconButton( tooltip: 'Fermer', onPressed: () => Navigator.of(context).pop(), icon: const Icon(Icons.close), ), ], ), const SizedBox(height: 8), const Divider(height: 1), const SizedBox(height: 12), Flexible( child: SingleChildScrollView( child: Column( children: fields .map( (field) => Padding( padding: const EdgeInsets.symmetric(vertical: 6), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( width: 180, child: Text( field.label, style: const TextStyle( fontWeight: FontWeight.w600, color: Colors.black87, ), ), ), Expanded( child: Text( field.value, style: const TextStyle(color: Colors.black87), ), ), ], ), ), ) .toList(), ), ), ), const SizedBox(height: 14), Align( alignment: Alignment.centerRight, child: Row( mainAxisSize: MainAxisSize.min, children: [ OutlinedButton.icon( onPressed: onDelete, icon: const Icon(Icons.delete_outline), label: const Text('Supprimer'), style: OutlinedButton.styleFrom( foregroundColor: Colors.red.shade700, side: BorderSide(color: Colors.red.shade300), ), ), const SizedBox(width: 10), ElevatedButton.icon( onPressed: onEdit, icon: const Icon(Icons.edit), label: const Text('Modifier'), ), ], ), ), ], ), ), ), ); } }