import 'dart:developer'; import 'package:wanisclient/utils/colors.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../providers/authentification_provider.dart'; import 'AddRefCodeDriverScreen.dart'; import 'Registration/BirthDateStep.dart'; import 'Registration/FullNameStep.dart'; import 'Registration/GenderStep.dart'; class RegistrationScreen extends StatefulWidget { final VoidCallback? onRegistrationComplete; const RegistrationScreen({ super.key, this.onRegistrationComplete, }); @override State createState() => _RegistrationScreenState(); } class _RegistrationScreenState extends State { late PageController _pageController; late AuthProvider authProvider; int _currentStep = 0; bool _isDisposed = false; // Form data String fullName = ''; DateTime? birthDate; String? selectedGender; @override void initState() { super.initState(); _pageController = PageController(); authProvider = context.read(); } @override void dispose() { _isDisposed = true; _pageController.dispose(); super.dispose(); } void _nextStep() { if (_isDisposed || !mounted) return; if (_currentStep < 3) { setState(() { _currentStep++; }); _pageController.nextPage( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, ); } } void _previousStep() { if (_isDisposed || !mounted) return; if (_currentStep > 0) { setState(() { _currentStep--; }); _pageController.previousPage( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, ); } else { Navigator.pop(context); } } Future _submitReferral(String? code) async { if (_isDisposed || !mounted) return; if(code == null|| code.isEmpty){ _nextStep(); return; } log("Code ***** $code"); // Add referral code bool codecheck= await authProvider.addReferral(code); // Check if still mounted before updating state if (mounted && !_isDisposed && codecheck ) { _nextStep(); } } Future _handleFinalSubmission() async { if (_isDisposed || !mounted) return; try { // Prepare data similar to CityDialog format final data = { 'name': fullName.trim(), if (selectedGender != null) 'gender': selectedGender!.toUpperCase(), if (birthDate != null) 'birthdate': birthDate!.toIso8601String(), }; // Call your API - replace this with your actual API call await authProvider.updateProfile(data); // For now, simulate API call await Future.delayed(const Duration(seconds: 2)); // If API call successful, trigger the callback if (mounted && !_isDisposed && widget.onRegistrationComplete != null) { widget.onRegistrationComplete!(); } print('Registration complete: $data'); } catch (e) { // Handle API error print('Registration failed: $e'); // Show error message to user if (mounted && !_isDisposed) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Registration failed. Please try again.'), backgroundColor: Colors.red, ), ); } } } @override Widget build(BuildContext context) { if (_isDisposed) { return const SizedBox.shrink(); } return SafeArea( child: Scaffold( backgroundColor: AppNewColors.whiteBackGround, body: Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 10), GestureDetector( onTap: _previousStep, child: Container( width: 32, height: 32, margin: const EdgeInsets.symmetric(vertical: 12), decoration: BoxDecoration( color: AppNewColors.lightgray, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: AppNewColors.black.withOpacity(.1), blurRadius: 1, offset: const Offset(2, 1), ), ], ), child: const Icon( Icons.arrow_back, color: AppNewColors.black, size: 16, ), ), ), Expanded( child: PageView( controller: _pageController, physics: const NeverScrollableScrollPhysics(), // Disable swiping onPageChanged: (index) { if (mounted && !_isDisposed) { setState(() { _currentStep = index; }); } }, children: [ AddRefCodeScreen( onContinue: _submitReferral, ), FullNameStep( initialValue: fullName, onChanged: (value) => fullName = value, onContinue: _nextStep, ), BirthDateStep( initialValue: birthDate, onChanged: (value) => birthDate = value, onContinue: _nextStep, ), GenderStep( initialValue: selectedGender, onChanged: (value) => selectedGender = value, onContinue: _handleFinalSubmission, ), ], ), ), ], ), ), ), ); } }