MIF_E31230988/apk/sen_pt/lib/app/widgets/progressModal.dart

125 lines
4.3 KiB
Dart

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>(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,
),
),
),
],
),
),
),
);
}
}