MIF_E31230910_MP-HRIS-MOBILE/lib/screens/onboarding/onboarding_check_screen.dart

104 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../core/theme.dart';
import '../../providers/setup_check_provider.dart';
import 'face_enrollment_screen.dart';
import '../profile/signature_screen.dart';
class OnboardingCheckScreen extends StatefulWidget {
const OnboardingCheckScreen({super.key});
@override
State<OnboardingCheckScreen> createState() => _OnboardingCheckScreenState();
}
class _OnboardingCheckScreenState extends State<OnboardingCheckScreen>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _fadeAnimation;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 600),
);
_fadeAnimation = CurvedAnimation(parent: _controller, curve: Curves.easeIn);
_controller.forward();
WidgetsBinding.instance.addPostFrameCallback((_) {
_runCheck();
});
}
Future<void> _runCheck() async {
final provider = context.read<SetupCheckProvider>();
await provider.checkSetup();
if (!mounted) return;
// Navigasi berdasarkan hasil pengecekan
if (!provider.hasFace) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => const FaceEnrollmentScreen(isOnboarding: true),
),
);
} else if (!provider.hasSignature) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => const SignatureScreen(isOnboarding: true),
),
);
} else {
Navigator.pushReplacementNamed(context, '/home');
}
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: FadeTransition(
opacity: _fadeAnimation,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
'assets/images/logo.png',
height: 100,
width: 220,
fit: BoxFit.contain,
),
const SizedBox(height: AppTheme.spacingXl),
const SizedBox(
width: 24,
height: 24,
child: CircularProgressIndicator(
color: AppTheme.primaryDark,
strokeWidth: 2.5,
),
),
const SizedBox(height: AppTheme.spacingMd),
Text(
'Memeriksa kelengkapan akun...',
style: AppTheme.bodySmall.copyWith(color: AppTheme.textSecondary),
),
],
),
),
),
);
}
}