import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:sen_pt/app/modules/landingPage/controllers/landing_page_controller.dart'; class ProgressModal extends StatelessWidget { const ProgressModal({super.key, required this.controller}); final LandingPageController controller; @override Widget build(BuildContext context) { return Obx( () => Dialog( shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), elevation: 0, backgroundColor: Colors.transparent, child: Container( padding: const EdgeInsets.all(28), decoration: BoxDecoration( borderRadius: BorderRadius.circular(24), color: Colors.white, boxShadow: [ BoxShadow( color: const Color(0xFF6C63FF).withAlpha(30), blurRadius: 30, offset: const Offset(0, 10), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // Loading Indicator Stack( alignment: Alignment.center, children: [ SizedBox( width: 80, height: 80, child: CircularProgressIndicator( strokeWidth: 6, valueColor: const AlwaysStoppedAnimation(Color(0xFF6C63FF)), backgroundColor: const Color(0xFF6C63FF).withAlpha(30), ), ), Container( width: 50, height: 50, decoration: BoxDecoration( shape: BoxShape.circle, gradient: const LinearGradient( colors: [Color(0xFF6C63FF), Color(0xFF48CAE4)], ), boxShadow: [ BoxShadow( color: const Color(0xFF6C63FF).withAlpha(60), blurRadius: 10, offset: const Offset(0, 4), ), ], ), child: const Icon(Icons.auto_graph_rounded, color: Colors.white, size: 24), ), ], ), const SizedBox(height: 25), const Text( 'Sedang Memproses...', style: TextStyle( fontSize: 18, fontWeight: FontWeight.w700, color: Color(0xFF1A1A2E), letterSpacing: 0.2, ), ), const SizedBox(height: 20), // Progress bar gradient ClipRRect( borderRadius: BorderRadius.circular(999), child: Container( height: 10, color: const Color(0xFFEEEEF5), child: FractionallySizedBox( alignment: Alignment.centerLeft, widthFactor: controller.percent.value / 100, child: Container( decoration: const BoxDecoration( gradient: LinearGradient( colors: [Color(0xFF6C63FF), Color(0xFF48CAE4)], ), ), ), ), ), ), const SizedBox(height: 12), Text( '${controller.percent.value}%', style: const TextStyle( fontSize: 15, fontWeight: FontWeight.w600, color: Color(0xFF6C63FF), ), ), if (controller.message.value.isNotEmpty) Padding( padding: const EdgeInsets.only(top: 10), child: Text( controller.message.value, textAlign: TextAlign.center, style: const TextStyle( fontSize: 12, color: Color(0xFF888899), height: 1.5, ), ), ), ], ), ), ), ); } }