import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/core/blocs/session/session_bloc.dart'; import 'package:flux/core/theme/theme.dart'; class DashboardContent extends StatelessWidget { final bool isLargeScreen; const DashboardContent({super.key, this.isLargeScreen = false}); @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { final store = state.selectedStore; final company = state.company; return Scaffold( backgroundColor: context.background, body: CustomScrollView( slivers: [ SliverAppBar( expandedHeight: 100.0, floating: false, pinned: true, elevation: 0, backgroundColor: context.background, flexibleSpace: FlexibleSpaceBar( titlePadding: const EdgeInsets.only(left: 24, bottom: 16), title: Text( store?.nome ?? 'Dashboard', style: TextStyle( color: context.primaryText, fontWeight: FontWeight.bold, ), ), ), ), SliverToBoxAdapter( child: Center( child: Container( constraints: const BoxConstraints(maxWidth: 1200), padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildWelcome(context, company?.ragioneSociale), const SizedBox(height: 32), const _SectionTitle(title: 'AZIONI RAPIDE'), const SizedBox(height: 16), _buildAdaptiveGrid(context), const SizedBox(height: 40), const _SectionTitle(title: 'INFO PUNTO VENDITA'), const SizedBox(height: 16), _buildStoreCard(context, store), ], ), ), ), ), ], ), ); }, ); } Widget _buildWelcome(BuildContext context, String? name) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Benvenuto in', style: TextStyle(color: context.secondaryText, fontSize: 16), ), Text( name ?? 'Azienda', style: const TextStyle(fontSize: 28, fontWeight: FontWeight.w900), ), ], ); } Widget _buildAdaptiveGrid(BuildContext context) { return LayoutBuilder( builder: (context, constraints) { // Logica Colonne: Mobile 2, Tablet 3, Desktop 4+ int crossAxisCount = 2; if (constraints.maxWidth > 1000) { crossAxisCount = 5; } else if (constraints.maxWidth > 700) { crossAxisCount = 3; } return GridView.count( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), crossAxisCount: crossAxisCount, mainAxisSpacing: 16, crossAxisSpacing: 16, childAspectRatio: isLargeScreen ? 1.3 : 1.5, children: [ _ActionCard( label: 'Nuova Op', icon: Icons.add_task, color: context.accent, onTap: () {}, ), _ActionCard( label: 'Clienti', icon: Icons.people, color: Colors.orange, onTap: () {}, ), _ActionCard( label: 'Campagne', icon: Icons.campaign, color: Colors.purple, onTap: () {}, ), _ActionCard( label: 'Report', icon: Icons.analytics, color: Colors.teal, onTap: () {}, ), ], ); }, ); } Widget _buildStoreCard(BuildContext context, dynamic store) { return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: context.accent.withValues(alpha: 0.05), borderRadius: BorderRadius.circular(16), border: Border.all(color: context.accent.withValues(alpha: 0.1)), ), child: Row( children: [ Icon(Icons.location_on, color: context.accent), const SizedBox(width: 16), Text('${store?.indirizzo}, ${store?.comune} (${store?.provincia})'), ], ), ); } } // Widget di supporto rimasti invariati (ActionCard e SectionTitle) class _ActionCard extends StatelessWidget { final String label; final IconData icon; final Color color; final VoidCallback onTap; const _ActionCard({ required this.label, required this.icon, required this.color, required this.onTap, }); @override Widget build(BuildContext context) { return Card( elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), // CAMBIA QUI: da Border.all a BorderSide side: BorderSide( color: context.accent.withValues(alpha: 0.1), width: 1, ), ), child: InkWell( onTap: onTap, borderRadius: BorderRadius.circular(16), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(icon, color: color, size: 32), const SizedBox(height: 8), Text(label, style: const TextStyle(fontWeight: FontWeight.bold)), ], ), ), ); } } class _SectionTitle extends StatelessWidget { final String title; const _SectionTitle({required this.title}); @override Widget build(BuildContext context) => Text( title, style: TextStyle( color: context.accent, fontWeight: FontWeight.bold, fontSize: 12, letterSpacing: 1.2, ), ); }