import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'constant/colors.dart'; import 'controller/auth/onboarding_controller.dart'; import 'models/model/onboarding_model.dart'; // The main PageView widget, now cleaner. class CustomSliderOnBoarding extends GetView { const CustomSliderOnBoarding({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return PageView.builder( controller: controller.pageController, onPageChanged: (val) { controller.onPageChanged(val); }, itemCount: onBoardingList.length, itemBuilder: (context, i) => OnBoardingPageContent( model: onBoardingList[i], ), ); } } // This is the new widget for the content of each onboarding page. class OnBoardingPageContent extends StatelessWidget { final OnBoardingModel model; const OnBoardingPageContent({Key? key, required this.model}) : super(key: key); @override Widget build(BuildContext context) { // Use the app's text theme for consistent styling final textTheme = Theme.of(context).textTheme; return Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ const Spacer(flex: 2), // Pushes content down ClipRRect( borderRadius: BorderRadius.circular(20.0), // Rounded corners for the image child: Image.asset( model.image!, height: Get.width * 0.6, // Slightly larger image width: Get.width * 0.8, fit: BoxFit.cover, // BoxFit.cover prevents image distortion ), ), const Spacer(flex: 2), Text( model.title!, textAlign: TextAlign.center, style: textTheme.displayLarge?.copyWith( color: AppColor.primaryColor, fontWeight: FontWeight.bold, fontSize: 24, // Consistent font size ), ), const SizedBox(height: 16), Text( model.body!, textAlign: TextAlign.center, style: textTheme.titleMedium?.copyWith( color: AppColor.accentColor, height: 1.5, // Improved line spacing fontSize: 16), ), const Spacer(flex: 3), // Pushes the content up from the dots ], ), ); } } // The refined dot controller. class CustomDotControllerOnBoarding extends StatelessWidget { const CustomDotControllerOnBoarding({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ...List.generate( onBoardingList.length, (index) => AnimatedContainer( margin: const EdgeInsets.only(right: 8), // Increased spacing duration: const Duration(milliseconds: 400), width: controller.currentPage == index ? 25 : 8, // More distinct width change height: 8, decoration: BoxDecoration( // Use a lighter color for inactive dots color: controller.currentPage == index ? AppColor.primaryColor : AppColor.primaryColor.withOpacity(0.3), borderRadius: BorderRadius.circular(10), ), ), ) ], ), ); } }