elektronika/lib/app/global_widgets/carousel/carousel_widget.dart

107 lines
3.0 KiB
Dart
Raw Normal View History

2023-02-27 07:12:45 +00:00
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'dart:async';
import 'package:smooth_page_indicator/smooth_page_indicator.dart';
import '../../../app/app.dart';
class CarouselWidget extends StatefulWidget {
final List<SliderModel> sliders;
CarouselWidget({required this.sliders});
@override
State<CarouselWidget> createState() => _CarouselWidgetState();
}
class _CarouselWidgetState extends State<CarouselWidget> {
final pageController = PageController(keepPage: false);
int _currentPage = 0;
void _onPageChanged(int currPage) {
_currentPage = currPage;
}
void _changeBanner() {
debugPrint('changeBanner');
Timer.periodic(Duration(seconds: 5), (Timer timer) {
if (_currentPage < widget.sliders.length - 1) {
_currentPage++;
} else {
_currentPage = 0;
}
if (pageController.hasClients) {
pageController.animateToPage(
_currentPage,
duration: Duration(milliseconds: 350),
curve: Curves.easeIn,
);
}
});
}
@override
void initState() {
_changeBanner();
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
// Carousel
Container(
// color: Colors.amber,
height: context.isTablet ? 0.24.sh : 0.22.sh,
child: PageView(
controller: pageController,
onPageChanged: (currPage) => _onPageChanged(currPage),
children: mapIndexed(
widget.sliders,
(index, SliderModel slider) => GestureDetector(
onTap: () {
if (slider.path.trim().length != 0) {
debugPrint('slider path: ${slider.path}');
2023-05-10 04:58:40 +00:00
debugPrint('slider id: ${slider.id}');
2023-02-27 07:12:45 +00:00
final params = slider.path.split('=');
final args = {
'type': params.first,
'id': params.last,
};
navigateToProductListScreen(args);
} else
debugPrint('empty path');
},
child: cachedImageNetwork(
slider.imageUrl,
BoxFit.contain,
const BorderRadius.all(Radius.circular(8.0)),
double.infinity,
0.18.sh,
),
),
).toList(),
),
),
SizedBox(height: 12.h),
// Indicator
widget.sliders.isNotEmpty
? SmoothPageIndicator(
controller: pageController,
count: widget.sliders.length,
effect: WormEffect(
activeDotColor: ThemeColor.mainColor,
dotColor: ThemeColor.colorC4C4C4,
dotWidth: 18.w,
dotHeight: 4.h,
),
)
: SizedBox.shrink(),
],
);
}
}