import 'package:stacked/stacked.dart'; import 'package:stacked_services/stacked_services.dart'; import 'package:yimaru_app/app/app.router.dart'; import '../../../app/app.locator.dart'; import 'onboarding_view.form.dart'; class OnboardingViewModel extends FormViewModel { final _navigationService = locator(); int _currentPage = 0; int get currentPage => _currentPage; int _previousPage = 0; int get previousPage => _previousPage; // Full name bool _focusFullName = false; bool get focusFullName => _focusFullName; // Educational background final List _educationalBackgrounds = [ 'No formal education', 'Primary school', 'Secondary /High school', 'College / Diploma', 'Bachelor’s and above' ]; List get educationalBackgrounds => _educationalBackgrounds; String? _selectedEducationalBackground; String? get selectedEducationalBackground => _selectedEducationalBackground; // Age group final List _ageGroups = [ '8-14', '15-18', '19-26', '26+', ]; List get ageGroups => _ageGroups; String? _selectedAgeGroup; String? get selectedAgeGroup => _selectedAgeGroup; // Occupation bool _focusOccupation = false; bool get focusOccupation => _focusOccupation; // Learning goal String? _selectedLearningGoal; String? get selectedLearningGoal => _selectedLearningGoal; final List> _learningGoals = [ { 'icon': 0, 'title': 'Learn to Speak English', 'subtitle': 'I know some English, but i want to learn to speak it', }, { 'icon': 1, 'title': 'Practice Speaking English', 'subtitle': 'I already speak English, but I want more practice.', }, { 'icon': 2, 'title': 'Skill-based Courses', 'subtitle': 'I want courses for IELTS, TOEFL, Duolingo, or work.', }, ]; List> get learningGoals => _learningGoals; // Learning reason bool _showReasonTextBox = false; bool get showReasonTextBox => _showReasonTextBox; bool _focusLearningReason = false; bool get focusLearningReason => _focusLearningReason; String? _selectedLearningReason; String? get selectedLearningReason => _selectedLearningReason; final List _learningReasons = [ 'Speak confidently at work or school', 'Travel or handle daily situations', 'Connect with family or friends', 'General skills expansion', 'Other' ]; List get learningReasons => _learningReasons; // Challenges bool _showChallengeTextBox = false; bool get showChallengeTextBox => _showChallengeTextBox; bool _focusChallenge = false; bool get focusChallenge => _focusChallenge; String? _selectedChallenge; String? get selectedChallenge => _selectedChallenge; final List _challenges = [ 'Pronunciation', 'Finding words or grammar quickly', 'Feeling nervous or lacking confidence', 'Understanding accents or fast speech', 'Other' ]; List get challenges => _challenges; // Topic bool _showTopicTextBox = false; bool get showTopicTextBox => _showTopicTextBox; bool _focusTopic = false; bool get focusTopic => _focusTopic; String? _selectedTopic; String? get selectedTopic => _selectedTopic; final List _topics = [ 'Food & Cooking', ' Hobbies, Sports, Music', 'Tech, News, Business', 'Travel, Places, Culture', 'Other' ]; List get topics => _topics; // First assessment bool _focusFirstAssessment = false; bool get focusFirstAssessment => _focusFirstAssessment; // Second assessment final List _secondAnswers = [ 'go', 'goes', 'went', 'going', ]; List get secondAnswers => _secondAnswers; String? _selectedA2Answer; String? get selectedA2Answer => _selectedA2Answer; // Third assessment final List _thirdAnswers = [ 'reduce', 'grow', 'stop', 'hide', ]; List get thirdAnswers => _thirdAnswers; String? _selectedA3Answer; String? get selectedA3Answer => _selectedA3Answer; // Third assessment final List _fourthAnswers = [ 'reduce', 'grow', 'stop', 'hide', ]; List get fourthAnswers => _fourthAnswers; String? _selectedA4Answer; String? get selectedA4Answer => _selectedA4Answer; // Languages final List> _languages = [ {'code': 'አማ', 'language': 'አማርኛ'}, {'code': 'EN', 'language': 'English'}, ]; List> get languages => _languages; Map _selectedLanguage = { 'code': 'EN', 'language': 'English' }; Map get selectedLanguage => _selectedLanguage; // Full name void setFullNameFocus() { _focusFullName = true; rebuildUi(); } // Education background void setSelectedEducationalBackground(String title) { _selectedEducationalBackground = title; rebuildUi(); } bool isSelectedEducationalBackground(String title) => _selectedEducationalBackground == title; // Age group void setSelectedAgeGroup(String title) { _selectedAgeGroup = title; rebuildUi(); } bool isSelectedAgeGroup(String title) => _selectedAgeGroup == title; // Occupation void setOccupationFocus() { _focusOccupation = true; rebuildUi(); } // Country Future> getCountries() async => ['Ethiopia', 'Djibouti']; // Region Future> getRegions(String country) async => ['Addis Ababa', 'Oromia']; // Learning goal void setSelectedLearningGoal(String title) { _selectedLearningGoal = title; rebuildUi(); } bool isSelectedLearningGoal(String title) => _selectedLearningGoal == title; // Learning reason void setLearningReasonFocus() { _focusLearningReason = true; rebuildUi(); } void setSelectedLearningReason(String title) { _selectedLearningReason = title; if (title.toLowerCase() == 'other') { _showReasonTextBox = true; } else { if (_showReasonTextBox) { _showReasonTextBox = false; _focusLearningReason = false; } } rebuildUi(); } bool isSelectedLearningReason(String title) => _selectedLearningReason == title; // Challenges void setChallengesFocus() { _focusChallenge = true; rebuildUi(); } void setSelectedChallenge(String title) { _selectedChallenge = title; if (title.toLowerCase() == 'other') { _showChallengeTextBox = true; } else { if (_showChallengeTextBox) { _showChallengeTextBox = false; _focusChallenge = false; } } rebuildUi(); } bool isSelectedChallenge(String title) => _selectedChallenge == title; // Topics void setTopicsFocus() { _focusTopic = true; rebuildUi(); } void setSelectedTopic(String title) { _selectedTopic = title; if (title.toLowerCase() == 'other') { _showTopicTextBox = true; } else { if (_showTopicTextBox) { _showTopicTextBox = false; _focusTopic = false; } } rebuildUi(); } bool isSelectedTopic(String title) => _selectedTopic == title; // First assessment void setFirstAssessmentFocus() { _focusFirstAssessment = true; rebuildUi(); } // Second assessment void setSelectedA2Answer(String title) { _selectedA2Answer = title; rebuildUi(); } bool isSelectedA2Answer(String title) => _selectedA2Answer == title; // Third assessment void setSelectedA3Answer(String title) { _selectedA3Answer = title; rebuildUi(); } bool isSelectedA3Answer(String title) => _selectedA3Answer == title; // Fourth assessment void setSelectedA4Answer(String title) { _selectedA4Answer = title; rebuildUi(); } bool isSelectedA4Answer(String title) => _selectedA4Answer == title; // Language void setSelectedLanguage(Map title) { _selectedLanguage = title; rebuildUi(); } bool isSelectedLanguage(String title) => _selectedLanguage['language'] == title; void next({int? page}) async { if (page == null) { if (_previousPage != 0) { _currentPage = _previousPage; } else { _currentPage++; if (_currentPage == 19) { rebuildUi(); await Future.delayed(const Duration(seconds: 3)); _currentPage++; } } } else { _previousPage = _currentPage; _currentPage = page; } rebuildUi(); } void pop({bool language = false}) { if (!language) { _currentPage--; } else { _currentPage = _previousPage; _previousPage = 0; } rebuildUi(); } }