diff --git a/lib/core/routes/app_router.dart b/lib/core/routes/app_router.dart index f581242..3400bf6 100644 --- a/lib/core/routes/app_router.dart +++ b/lib/core/routes/app_router.dart @@ -4,7 +4,7 @@ import 'package:flux/features/auth/ui/auth_screen.dart'; import 'package:flux/features/company/ui/create_company_screen.dart'; import 'package:flux/features/customers/models/customer_model.dart'; import 'package:flux/features/customers/ui/customer_detail_screen.dart'; -import 'package:flux/features/home_and_dashboard/ui/home_screen.dart'; +import 'package:flux/features/home/ui/home_screen.dart'; import 'package:flux/features/products/ui/products_screen.dart'; import 'package:flux/features/store/ui/create_store_screen.dart'; import 'package:go_router/go_router.dart'; diff --git a/lib/features/home_and_dashboard/ui/dashboard_action_card.dart b/lib/features/home/ui/dashboard_action_card.dart similarity index 100% rename from lib/features/home_and_dashboard/ui/dashboard_action_card.dart rename to lib/features/home/ui/dashboard_action_card.dart diff --git a/lib/features/home_and_dashboard/ui/dashboard_adaptive_grid.dart b/lib/features/home/ui/dashboard_adaptive_grid.dart similarity index 96% rename from lib/features/home_and_dashboard/ui/dashboard_adaptive_grid.dart rename to lib/features/home/ui/dashboard_adaptive_grid.dart index 25831c0..221c698 100644 --- a/lib/features/home_and_dashboard/ui/dashboard_adaptive_grid.dart +++ b/lib/features/home/ui/dashboard_adaptive_grid.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flux/core/theme/theme.dart'; -import 'package:flux/features/home_and_dashboard/ui/dashboard_action_card.dart'; +import 'package:flux/features/home/ui/dashboard_action_card.dart'; import 'package:go_router/go_router.dart'; class DashboardAdaptiveGrid extends StatelessWidget { diff --git a/lib/features/home_and_dashboard/ui/dashboard_content.dart b/lib/features/home/ui/dashboard_content.dart similarity index 97% rename from lib/features/home_and_dashboard/ui/dashboard_content.dart rename to lib/features/home/ui/dashboard_content.dart index a701205..997f5ff 100644 --- a/lib/features/home_and_dashboard/ui/dashboard_content.dart +++ b/lib/features/home/ui/dashboard_content.dart @@ -2,7 +2,7 @@ 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'; -import 'package:flux/features/home_and_dashboard/ui/dashboard_adaptive_grid.dart'; +import 'package:flux/features/home/ui/dashboard_adaptive_grid.dart'; class DashboardContent extends StatelessWidget { final bool isLargeScreen; diff --git a/lib/features/home_and_dashboard/ui/home_screen.dart b/lib/features/home/ui/home_screen.dart similarity index 70% rename from lib/features/home_and_dashboard/ui/home_screen.dart rename to lib/features/home/ui/home_screen.dart index ac9f44f..6caecec 100644 --- a/lib/features/home_and_dashboard/ui/home_screen.dart +++ b/lib/features/home/ui/home_screen.dart @@ -14,7 +14,7 @@ class HomeScreen extends StatefulWidget { class _HomeScreenState extends State { int _selectedIndex = 0; - bool _isRailHovered = false; + bool _extendRailway = false; @override Widget build(BuildContext context) { @@ -41,26 +41,7 @@ class _HomeScreenState extends State { // --- BOTTOM BAR (Solo Mobile) --- bottomNavigationBar: isLargeScreen ? null - : BottomNavigationBar( - currentIndex: _selectedIndex, - onTap: (index) => setState(() => _selectedIndex = index), - selectedItemColor: context.accent, - unselectedItemColor: context.secondaryText, - items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.dashboard), - label: 'Dashboard', - ), - BottomNavigationBarItem( - icon: Icon(Icons.receipt_long), - label: 'Operazioni', - ), - BottomNavigationBarItem( - icon: Icon(Icons.folder_shared), - label: 'Anagrafiche', - ), - ], - ), + : _buildBottomNavigationBar(_selectedIndex), ); }, ); @@ -68,14 +49,38 @@ class _HomeScreenState extends State { ); } + // --- BOTTOM NAVIGATION BAR (Mobile) --- + Widget _buildBottomNavigationBar(int selectedIndex) { + return BottomNavigationBar( + currentIndex: selectedIndex, + onTap: (index) => setState(() => _selectedIndex = index), + selectedItemColor: context.accent, + unselectedItemColor: context.secondaryText, + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.dashboard), + label: 'Dashboard', + ), + BottomNavigationBarItem( + icon: Icon(Icons.receipt_long), + label: 'Operazioni', + ), + BottomNavigationBarItem( + icon: Icon(Icons.folder_shared), + label: 'Anagrafiche', + ), + ], + ); + } + // --- NAVIGATION RAIL (Desktop) --- - Widget _buildNavigationRail(bool railAlwaysExtended) { + Widget _buildNavigationRail(bool veryLargeScreen) { return MouseRegion( - onEnter: (_) => setState(() => _isRailHovered = true), - onExit: (_) => setState(() => _isRailHovered = false), + onEnter: (_) => setState(() => _extendRailway = true), + onExit: (_) => setState(() => _extendRailway = false), child: NavigationRail( // Manteniamo 'extended' dinamico in base alla larghezza per un look Pro - extended: railAlwaysExtended ? true : _isRailHovered, + extended: veryLargeScreen ? true : _extendRailway, selectedIndex: _selectedIndex, onDestinationSelected: (index) => setState(() => _selectedIndex = index), @@ -83,7 +88,7 @@ class _HomeScreenState extends State { indicatorColor: context.accent.withValues(alpha: 0.2), // Header con il logo FLUX o l'icona bolt - leading: _buildRailHeader(railAlwaysExtended ? true : _isRailHovered), + leading: _buildRailHeader(veryLargeScreen), selectedIconTheme: IconThemeData(color: context.accent, size: 28), unselectedIconTheme: IconThemeData( @@ -120,19 +125,24 @@ class _HomeScreenState extends State { ); } - Widget _buildRailHeader(bool isExtended) { + Widget _buildRailHeader(bool veryLargeScreen) { return Padding( padding: const EdgeInsets.symmetric(vertical: 24), - child: isExtended - ? Text( - 'FLUX', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 24, - color: context.accent, - ), - ) - : Icon(Icons.bolt, color: context.accent, size: 32), + child: GestureDetector( + onTap: veryLargeScreen + ? null + : () => setState(() => _extendRailway = !_extendRailway), + child: _extendRailway + ? Text( + 'FLUX', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 24, + color: context.accent, + ), + ) + : Icon(Icons.bolt, color: context.accent, size: 32), + ), ); } @@ -142,7 +152,6 @@ class _HomeScreenState extends State { case 0: return DashboardContent( isLargeScreen: isLargeScreen, - // Se dalla Dashboard clicchi "Clienti", ti porto all'Hub onTabRequested: (idx) => setState(() => _selectedIndex = 2), ); case 1: diff --git a/lib/features/products/ui/models_list.dart b/lib/features/products/ui/models_list.dart index 9d7a72f..d398986 100644 --- a/lib/features/products/ui/models_list.dart +++ b/lib/features/products/ui/models_list.dart @@ -41,7 +41,7 @@ class ModelsList extends StatelessWidget { Expanded( child: ListView.separated( itemCount: state.models.length, - separatorBuilder: (_, __) => const Divider(height: 1), + separatorBuilder: (_, _) => const Divider(height: 1), itemBuilder: (context, index) { final model = state.models[index]; return ListTile(