diff --git a/flutter_01.png b/flutter_01.png new file mode 100644 index 0000000..af71029 Binary files /dev/null and b/flutter_01.png differ diff --git a/flutter_02.png b/flutter_02.png new file mode 100644 index 0000000..6cb2f87 Binary files /dev/null and b/flutter_02.png differ diff --git a/lib/main.dart b/lib/main.dart index ad4ad55..4daaf6d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'widgets/hero_section_widget.dart'; import 'widgets/search_bar_widget.dart'; import 'widgets/popular_places_widget.dart'; import 'widgets/recommendation_widget.dart'; +import 'widgets/bottom_navigation_widget.dart'; import 'theme/app_theme.dart'; void main() { @@ -31,26 +32,33 @@ class TravelHomePage extends StatelessWidget { return Scaffold( backgroundColor: AppTheme.backgroundColor, body: SafeArea( - child: SingleChildScrollView( - child: Column( - children: [ - SizedBox( - height: MediaQuery.of(context).size.height * 0.5, - child: const HeroSectionWidget(), + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Column( + children: [ + SizedBox( + height: MediaQuery.of(context).size.height * 0.5, + child: const HeroSectionWidget(), + ), + + const SizedBox(height: 20), + + const PopularPlacesWidget(), + + const SizedBox(height: 20), + + const RecommendationWidget(), + + const SizedBox(height: 20), + ], + ), ), - - const SizedBox(height: 20), - - const PopularPlacesWidget(), - - const SizedBox(height: 20), - - // Section Recommendation - const RecommendationWidget(), - - const SizedBox(height: 20), - ], - ), + ), + + const BottomNavigationWidget(), + ], ), ), ); diff --git a/lib/widgets/bottom_navigation_widget.dart b/lib/widgets/bottom_navigation_widget.dart new file mode 100644 index 0000000..354e901 --- /dev/null +++ b/lib/widgets/bottom_navigation_widget.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; + +class BottomNavigationWidget extends StatelessWidget { + const BottomNavigationWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Align( + alignment: Alignment.bottomCenter, + child: Container( + margin: const EdgeInsets.fromLTRB(0, 0, 0, 0), + decoration: const BoxDecoration( + color: Color(0xFF1E3C72), + borderRadius: BorderRadius.all( + Radius.circular(25), + ), + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(15, 12, 15, 20), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + _buildNavItem(Icons.home, true), + _buildNavItem(Icons.calendar_today, false), + _buildNavItem(Icons.chat_bubble_outline, false), + ], + ), + ), + ), + ); + } + + Widget _buildNavItem(IconData icon, bool isActive) { + return Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: isActive ? Colors.white : const Color(0xFF4A6FA5), + shape: BoxShape.circle, + ), + child: Icon( + icon, + color: isActive ? const Color(0xFF1E3C72) : Colors.white, + size: 20, + ), + ); + } +} \ No newline at end of file diff --git a/lib/widgets/recommendation_widget.dart b/lib/widgets/recommendation_widget.dart index 40102b7..dcb5871 100644 --- a/lib/widgets/recommendation_widget.dart +++ b/lib/widgets/recommendation_widget.dart @@ -9,7 +9,6 @@ class RecommendationWidget extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Header avec titre et "View all" Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Row( @@ -33,7 +32,6 @@ class RecommendationWidget extends StatelessWidget { const SizedBox(height: 16), - // Carte de recommandation unique Container( margin: const EdgeInsets.symmetric(horizontal: 8), height: 200, @@ -51,13 +49,11 @@ class RecommendationWidget extends StatelessWidget { borderRadius: BorderRadius.circular(20), child: Stack( children: [ - // Image de fond Positioned.fill( child: Image.asset( 'assets/images/fond1.webp', fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { - // Fallback avec gradient si l'image ne charge pas return Container( decoration: BoxDecoration( gradient: LinearGradient( @@ -76,7 +72,6 @@ class RecommendationWidget extends StatelessWidget { ), ), - // Overlay sombre pour le texte Positioned.fill( child: Container( decoration: BoxDecoration( @@ -93,7 +88,6 @@ class RecommendationWidget extends StatelessWidget { ), ), - // Contenu textuel Positioned( bottom: 20, left: 20,