import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/features/notes/blocs/notes_bloc.dart'; import 'package:flux/features/notes/models/note_model.dart'; import 'package:go_router/go_router.dart'; // Supponendo tu usi GoRouter per la navigazione class DashboardNotesWidget extends StatelessWidget { const DashboardNotesWidget({super.key}); @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Intestazione del riquadro Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Le mie Note', style: Theme.of( context, ).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold), ), TextButton( onPressed: () { // Vai alla bacheca completa context.push('/notes'); }, child: const Text('Vedi tutte'), ), ], ), const SizedBox(height: 12), // Il corpo del widget collegato al Bloc BlocBuilder( builder: (context, state) { if (state.status == NotesStatus.loading && state.notes.isEmpty) { return const Center(child: CircularProgressIndicator()); } if (state.status == NotesStatus.failure) { return const Center( child: Text( 'Errore nel caricamento delle note.', style: TextStyle(color: Colors.red), ), ); } if (state.notes.isEmpty) { return _buildEmptyState(context); } // Prendiamo solo le prime 4 note per non intaccare troppo spazio in Dashboard final displayNotes = state.notes.take(4).toList(); return SizedBox( height: 140, // Altezza fissa per lo scroll orizzontale child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: displayNotes.length, itemBuilder: (context, index) { return _buildMiniPostIt(context, displayNotes[index]); }, ), ); }, ), ], ); } Widget _buildMiniPostIt(BuildContext context, NoteModel note) { return GestureDetector( onTap: () { // Vai al form di dettaglio passando l'ID o l'oggetto context.push('/notes/edit/${note.id}'); }, child: Container( width: 140, margin: const EdgeInsets.only(right: 12, bottom: 8), padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: note.flutterColor, borderRadius: BorderRadius.circular(8), boxShadow: const [ BoxShadow( color: Colors.black12, blurRadius: 4, offset: Offset(2, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( note.title?.isNotEmpty == true ? note.title! : 'Senza titolo', style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 14, color: Colors.black87, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ), if (note.isPinned) const Icon(Icons.push_pin, size: 14, color: Colors.black54), ], ), const SizedBox(height: 8), Expanded( child: Text( note.content ?? '', style: const TextStyle(fontSize: 12, color: Colors.black87), maxLines: 4, overflow: TextOverflow.ellipsis, ), ), ], ), ), ); } Widget _buildEmptyState(BuildContext context) { return Container( width: double.infinity, padding: const EdgeInsets.all(24), decoration: BoxDecoration( color: Colors.grey.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(12), border: Border.all( color: Colors.grey.withValues(alpha: 0.3), style: BorderStyle.solid, ), ), child: Column( children: [ const Icon( Icons.sticky_note_2_outlined, size: 32, color: Colors.grey, ), const SizedBox(height: 8), const Text('Nessuna nota presente.'), TextButton( onPressed: () => context.push('/notes/create'), child: const Text('Creane una ora'), ), ], ), ); } }