Files
flutterV1/lib/widgets/popular_places_widget.dart
T
2025-09-12 14:25:01 +04:00

177 lines
5.2 KiB
Dart

import 'package:flutter/material.dart';
import '../theme/app_theme.dart';
class PopularPlacesWidget extends StatelessWidget {
const PopularPlacesWidget({super.key});
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Popular Place',
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
),
),
Text(
'View all',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
color: AppTheme.textSecondary,
),
),
],
),
),
const SizedBox(height: 16),
SizedBox(
height: 200,
child: ListView.builder(
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.symmetric(horizontal: 8),
itemCount: 5,
itemBuilder: (context, index) {
return _buildPlaceCard(context, index);
},
),
),
],
);
}
Widget _buildPlaceCard(BuildContext context, int index) {
final places = [
{
'name': 'Poisson Rouge',
'location': 'Aquarium, France',
'imagePath': 'assets/images/fond1.webp',
},
{
'name': 'Poisson Clown',
'location': 'Récif, Océan',
'imagePath': 'assets/images/poisson2.webp',
},
{
'name': 'Poisson Angelfish',
'location': 'Caraïbes, Mer',
'imagePath': 'assets/images/poisson3.webp',
},
{
'name': 'Poisson Tang',
'location': 'Pacifique, Océan',
'imagePath': 'assets/images/poisson4.webp',
},
{
'name': 'Poisson Betta',
'location': 'Asie, Rivière',
'imagePath': 'assets/images/poisson5.webp',
},
];
final place = places[index];
return Container(
width: 160,
margin: const EdgeInsets.only(right: 16),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.2),
blurRadius: 10,
offset: const Offset(0, 5),
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Stack(
children: [
Positioned.fill(
child: Image.asset(
place['imagePath'] as String,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xFF1E3A8A),
Color(0xFF7C2D12),
Color(0xFFDC2626),
Color(0xFFF59E0B),
],
),
),
);
},
),
),
Positioned.fill(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.transparent,
Colors.black.withOpacity(0.6),
],
),
),
),
),
Positioned(
bottom: 16,
left: 16,
right: 16,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
place['name'] as String,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 4),
Row(
children: [
const Icon(
Icons.location_on,
color: Colors.white,
size: 14,
),
const SizedBox(width: 4),
Expanded(
child: Text(
place['location'] as String,
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: Colors.white.withOpacity(0.9),
),
),
),
],
),
],
),
),
],
),
),
);
}
}