import 'package:flutter/material.dart'; import '../../services/whats_new_service.dart'; class WhatsNewDialog extends StatelessWidget { final VoidCallback onDismiss; final List features; const WhatsNewDialog({ super.key, required this.onDismiss, required this.features, }); @override Widget build(BuildContext context) { final theme = Theme.of(context); return Dialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), backgroundColor: theme.colorScheme.surface, child: Padding( padding: const EdgeInsets.all(24.0), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: theme.colorScheme.primaryContainer, shape: BoxShape.circle, ), child: Icon( Icons.auto_awesome, color: theme.colorScheme.primary, size: 24, ), ), const SizedBox(width: 16), Expanded( child: Text( 'Quoi de neuf ?', style: theme.textTheme.headlineSmall?.copyWith( fontWeight: FontWeight.bold, ), ), ), ], ), const SizedBox(height: 24), // Features List Flexible( child: ListView.separated( shrinkWrap: true, itemCount: features.length, separatorBuilder: (_, __) => const SizedBox(height: 16), itemBuilder: (context, index) { final feature = features[index]; return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Icon( feature.icon, color: theme.colorScheme.primary, size: 20, ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( feature.title, style: theme.textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w600, ), ), const SizedBox(height: 4), Text( feature.description, style: theme.textTheme.bodyMedium?.copyWith( color: theme.colorScheme.onSurfaceVariant, ), ), ], ), ), ], ); }, ), ), const SizedBox(height: 32), // Button SizedBox( width: double.infinity, height: 50, child: ElevatedButton( onPressed: () { // Marquer comme vu via le service WhatsNewService().markCurrentVersionAsSeen(); onDismiss(); }, style: ElevatedButton.styleFrom( backgroundColor: theme.colorScheme.primary, foregroundColor: theme.colorScheme.onPrimary, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: const Text( 'C\'est parti !', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), ), ), ), ], ), ), ); } } class WhatsNewItem { final IconData icon; final String title; final String description; const WhatsNewItem({ required this.icon, required this.title, required this.description, }); }