Yimaru-Mobile/StudioProjects/yimaru_app/lib/ui/views/onboarding/onboarding_viewmodel.dart

393 lines
8.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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';
class OnboardingViewModel extends FormViewModel {
final _navigationService = locator<NavigationService>();
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<String> _educationalBackgrounds = [
'No formal education',
'Primary school',
'Secondary /High school',
'College / Diploma',
'Bachelors and above',
];
List<String> get educationalBackgrounds => _educationalBackgrounds;
String? _selectedEducationalBackground;
String? get selectedEducationalBackground => _selectedEducationalBackground;
// Age group
final List<String> _ageGroups = [
'8-14',
'15-18',
'19-26',
'26+',
];
List<String> 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<Map<String, dynamic>> _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<Map<String, dynamic>> 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<String> _learningReasons = [
'Speak confidently at work or school',
'Travel or handle daily situations',
'Connect with family or friends',
'General skills expansion',
'Other'
];
List<String> 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<String> _challenges = [
'Pronunciation',
'Finding words or grammar quickly',
'Feeling nervous or lacking confidence',
'Understanding accents or fast speech',
'Other'
];
List<String> 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<String> _topics = [
'Food & Cooking',
' Hobbies, Sports, Music',
'Tech, News, Business',
'Travel, Places, Culture',
'Other'
];
List<String> get topics => _topics;
// First assessment
bool _focusFirstAssessment = false;
bool get focusFirstAssessment => _focusFirstAssessment;
// Second assessment
final List<String> _secondAnswers = [
'go',
'goes',
'went',
'going',
];
List<String> get secondAnswers => _secondAnswers;
String? _selectedA2Answer;
String? get selectedA2Answer => _selectedA2Answer;
// Third assessment
final List<String> _thirdAnswers = [
'reduce',
'grow',
'stop',
'hide',
];
List<String> get thirdAnswers => _thirdAnswers;
String? _selectedA3Answer;
String? get selectedA3Answer => _selectedA3Answer;
// Third assessment
final List<String> _fourthAnswers = [
'reduce',
'grow',
'stop',
'hide',
];
List<String> get fourthAnswers => _fourthAnswers;
String? _selectedA4Answer;
String? get selectedA4Answer => _selectedA4Answer;
// Languages
final List<Map<String, dynamic>> _languages = [
{'code': 'አማ', 'language': 'አማርኛ'},
{'code': 'EN', 'language': 'English'},
];
List<Map<String, dynamic>> get languages => _languages;
Map<String, dynamic> _selectedLanguage = {
'code': 'EN',
'language': 'English'
};
Map<String, dynamic> 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<List<String>> getCountries() async => ['Ethiopia', 'Djibouti'];
// Region
Future<List<String>> 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<String, dynamic> title) {
_selectedLanguage = title;
rebuildUi();
}
bool isSelectedLanguage(String title) =>
_selectedLanguage['language'] == title;
// Navigation
Future<void> navigateToHome() async =>
await _navigationService.navigateToHomeView();
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();
}
}