TKK_E32230859/lib/app/widgets/banner_slider.dart

95 lines
3.1 KiB
Dart

// lib/app/widgets/banner_slider.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:carousel_slider/carousel_slider.dart';
class BannerSlider extends StatelessWidget {
final List<String> bannerImages;
final RxInt currentCarouselIndex;
final Function(int) onPageChanged;
const BannerSlider({
super.key,
required this.bannerImages,
required this.currentCarouselIndex,
required this.onPageChanged,
});
@override
Widget build(BuildContext context) {
return Column(
children: [
CarouselSlider(
options: CarouselOptions(
height: 180,
autoPlay: true,
autoPlayInterval: const Duration(seconds: 5),
enlargeCenterPage: true,
viewportFraction: 0.9,
onPageChanged: (index, reason) {
onPageChanged(index);
},
),
items: bannerImages.map((imagePath) {
return Builder(
builder: (BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width,
margin: const EdgeInsets.symmetric(horizontal: 5.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset(
imagePath,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return Container(
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF00B8D4), Color(0xFF0091EA)],
),
borderRadius: BorderRadius.circular(15),
),
child: const Center(
child: Icon(
Icons.image_not_supported,
color: Colors.white,
size: 50,
),
),
);
},
),
),
);
},
);
}).toList(),
),
const SizedBox(height: 10),
// Dots Indicator
Obx(
() => Row(
mainAxisAlignment: MainAxisAlignment.center,
children: List.generate(
bannerImages.length,
(index) => Container(
width: 8,
height: 8,
margin: const EdgeInsets.symmetric(horizontal: 4),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: currentCarouselIndex.value == index
? const Color(0xFF0091EA)
: Colors.grey[300],
),
),
),
),
),
],
);
}
}