Compare commits
3 Commits
62c136d8d4
...
5581d00b15
| Author | SHA1 | Date | |
|---|---|---|---|
| 5581d00b15 | |||
| d4e46d5ddb | |||
| 96c7eece9b |
|
|
@ -22,7 +22,7 @@
|
|||
"confirm_password": "የይለፍ ቃል ያረጋግጡ",
|
||||
"eight_character_minimum": "ቢያንስ 8 ፊደላት",
|
||||
"password_match": "የይለፍ ቃሉ ተመሳስሏል",
|
||||
"sign_up_agreement": "‘ይመዝገቡ’ የሚለውን ሲጫኑ በ‘አገልግሎት ውሎች’ እና ‘በግላዊነት ፖሊሲ’ ይስማማሉ።" ,
|
||||
"sign_up_agreement": "‘ይመዝገቡ’ የሚለውን ሲጫኑ በ‘አገልግሎት ውሎች’ እና ‘በግላዊነት ፖሊሲ’ ይስማማሉ።",
|
||||
"terms_of_services": "የአገልግሎት ውሎች",
|
||||
"and": "እና",
|
||||
"privacy_policy": "የግላዊነት ፖሊሲ",
|
||||
|
|
@ -33,9 +33,9 @@
|
|||
"code_sent_to_email": "ኮዱ ወደ ኢሜል ተልኳል",
|
||||
"resend_code_in": "ኮዱን እንደገና ለመላክ የቀረው ጊዜ",
|
||||
"reset_password": " የይለፍ ቃልን ይቀይሩ",
|
||||
"enter_email_reset_code": "ኢሜይልዎን ያስገቡ። የይለፍ ቃል መለወጫ ኮድ እንልክልዎታለን።" ,
|
||||
"enter_email_reset_code": "ኢሜይልዎን ያስገቡ። የይለፍ ቃል መለወጫ ኮድ እንልክልዎታለን።",
|
||||
"please_wait": "እባክዎ ይጠብቁ",
|
||||
"reset_code_sent": "የመቀየሪያ ኮድ በተሳካ ሁኔታ ተልኳል" ,
|
||||
"reset_code_sent": "የመቀየሪያ ኮድ በተሳካ ሁኔታ ተልኳል",
|
||||
"reset_code": " የመቀየሪያ ኮድ ",
|
||||
"new_password": "አዲስ የይለፍ ቃል",
|
||||
"logged_in_successfully": "በተሳካ ሁኔታ ገብተዋል",
|
||||
|
|
@ -183,13 +183,10 @@
|
|||
"welcome_abroad": "እንኳን ደህና መጣህ",
|
||||
"ready_to_explore": "የግል ትምህርቶችህን ለማሰስ ዝግጁ ነህ።",
|
||||
"finish": "አጠናቅቅ",
|
||||
|
||||
"finish_all_practice": "ልምምዱን ለመውሰድ በትምህርቶቹ ውስጥ ያሉትን ሁሉንም ልምምዶች ያጠናቅቁ።"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"finish_all_practice_lesson": "ይህን ልምምድ ለመውሰድ የቀድሞውን የትምህርት ልምምድ ያጠናቅቁ",
|
||||
"finish_all_practice_module": "የሞጁሉን ልምምድ ለመውሰድ የትምህርት ልምምዶችን ያጠናቅቁ",
|
||||
"finish_all_practice_course": "የኮርሱን ልምምድ ለመውሰድ የሞጁል ልምምዶችን ያጠናቅቁ",
|
||||
"finish_all_practice_previouse_module": "ይህን ልምምድ ለመውሰድ የቀድሞውን የሞጁል ልምምድ ያጠናቅቁ",
|
||||
"finish_all_practice_previouse_course": "ይህን ለመውሰድ የቀድሞውን የኮርስ ልምምድ ያጠናቅቁ"
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -183,5 +183,10 @@
|
|||
"welcome_abroad": "Welcome aboard",
|
||||
"ready_to_explore": "You’re ready to explore your personalized lessons.",
|
||||
"finish": "Finish",
|
||||
"finish_all_practice": "Finish all the practices in the lessons to take this practice"
|
||||
"finish_all_practice_lesson": "Finish the previous lesson practice to take this practice",
|
||||
"finish_all_practice_module": "Finish the lesson practices to take the Module Practice",
|
||||
"finish_all_practice_course": "Finish the Module practices to take the Course practice",
|
||||
"finish_all_practice_previouse_module": "Finish the previous Module practice to take this practice",
|
||||
"finish_all_practice_previouse_course": "Finish the previous course practice to take this"
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,11 @@ enum ProgressStatuses { pending, started, completed }
|
|||
// Duolingo types
|
||||
enum DuolingoAssessments { speaking, reading, writing, listening }
|
||||
|
||||
|
||||
// Practice reason
|
||||
enum PracticeReason { course, module, lesson, previousModule, previousCourse }
|
||||
|
||||
|
||||
// State object
|
||||
enum StateObjects {
|
||||
none,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import 'dart:ui';
|
|||
|
||||
import 'package:easy_localization/easy_localization.dart' show AssetLoader;
|
||||
|
||||
class CodegenLoader extends AssetLoader {
|
||||
class CodegenLoader extends AssetLoader{
|
||||
const CodegenLoader();
|
||||
|
||||
@override
|
||||
|
|
@ -14,403 +14,387 @@ class CodegenLoader extends AssetLoader {
|
|||
return Future.value(mapLocales[locale.toString()]);
|
||||
}
|
||||
|
||||
static const Map<String, dynamic> _am = {
|
||||
"loading": "በመጫን ላይ",
|
||||
"welcome_back": "እንኳን በደህና ተመለሱ",
|
||||
"checking_user_info": "የተጠቃሚ መረጃን በማረጋገጥ ላይ",
|
||||
"dont_have_account": "መለያ የለዎትም?",
|
||||
"email": "ኢሜይል",
|
||||
"password": "የይለፍ ቃል",
|
||||
"forgot_password": "የይለፍ ቃል ረሱ?",
|
||||
"cont": "ቀጥል",
|
||||
"register": "ይመዝገቡ",
|
||||
"login_with_google": "በጉግል ይግቡ",
|
||||
"or": "ወይም",
|
||||
"login_with_phone": "በስልክ ቁጥር ይግቡ",
|
||||
"create_account": "አዲስ መለያ ይፍጠሩ",
|
||||
"already_have_account": "መለያ አለዎት?",
|
||||
"login": " ይግቡ ",
|
||||
"register_with_google": "በጉግል ይመዝገቡ",
|
||||
"register_with_phone": "በስልክ ቁጥር ይመዝገቡ",
|
||||
"enter_phone_number": "የስልክ ቁጥርዎን ያስገቡ። የማረጋገጫ ኮድ እንልክልዎታለን።",
|
||||
"login_with_email": "በኢሜይል ይግቡ",
|
||||
"create_password": "የይለፍ ቃል ይፍጠሩ",
|
||||
"confirm_password": "የይለፍ ቃል ያረጋግጡ",
|
||||
"eight_character_minimum": "ቢያንስ 8 ፊደላት",
|
||||
"password_match": "የይለፍ ቃሉ ተመሳስሏል",
|
||||
"sign_up_agreement":
|
||||
"‘ይመዝገቡ’ የሚለውን ሲጫኑ በ‘አገልግሎት ውሎች’ እና ‘በግላዊነት ፖሊሲ’ ይስማማሉ።",
|
||||
"terms_of_services": "የአገልግሎት ውሎች",
|
||||
"and": "እና",
|
||||
"privacy_policy": "የግላዊነት ፖሊሲ",
|
||||
"register_with_email": "በኢሜል ይመዝገቡ",
|
||||
"verification_code": "የማረጋገጫ ኮድ",
|
||||
"resend_code": "ኮዱን እንደገና ላክ",
|
||||
"code_sent_to_phone": "ኮዱ ወደ ስልክ ቁጥርዎ ተልኳል",
|
||||
"code_sent_to_email": "ኮዱ ወደ ኢሜል ተልኳል",
|
||||
"resend_code_in": "ኮዱን እንደገና ለመላክ የቀረው ጊዜ",
|
||||
"reset_password": " የይለፍ ቃልን ይቀይሩ",
|
||||
"enter_email_reset_code": "ኢሜይልዎን ያስገቡ። የይለፍ ቃል መለወጫ ኮድ እንልክልዎታለን።",
|
||||
"please_wait": "እባክዎ ይጠብቁ",
|
||||
"reset_code_sent": "የመቀየሪያ ኮድ በተሳካ ሁኔታ ተልኳል",
|
||||
"reset_code": " የመቀየሪያ ኮድ ",
|
||||
"new_password": "አዲስ የይለፍ ቃል",
|
||||
"logged_in_successfully": "በተሳካ ሁኔታ ገብተዋል",
|
||||
"view_course": " ኮርሱን ይመልከቱ",
|
||||
"continue_learning": "መማርን ይቀጥሉ",
|
||||
"start_learning": "ትምህርትን ይጀምሩ",
|
||||
"completed": "ተጠናቋል",
|
||||
"take_practice": "ልምምድ ያድርጉ",
|
||||
"your_current_level": "የአሁኑ ደረጃዎ",
|
||||
"overall_progress": "አጠቃላይ እድገት",
|
||||
"great_work": "በርቱ! በጣም ጥሩ እየሰሩ ነው",
|
||||
"view_module": "ሞጁሉን ይመልከቱ",
|
||||
"progress": "እድገት",
|
||||
"keep_going": "ይቀጥሉ - ከግማሽ በላይ ጨርሰዋል ",
|
||||
"lessons_in_module": "በዚህ ሞጁል ውስጥ ያሉ ትምህርቶች ",
|
||||
"practice": "ልምምድ",
|
||||
"start": "ጀምር",
|
||||
"in_progress": "በሂደት ላይ",
|
||||
"hello": "ሰላም",
|
||||
"ready_to_learn": " ዛሬ እንግሊዝኛ ለመማር ተዘጋጅተዋል? ",
|
||||
"learn": "ይማሩ ",
|
||||
"course": "ኮርስ",
|
||||
"profile": " ፕሮፋይል ",
|
||||
"speaking_partner": "የንግግር ጓደኛ",
|
||||
"practice_what_you_learned": "አሁን የተማሩትን እንለማመድ",
|
||||
"practice_questions": "ጥቂት ጥያቄዎችን እጠይቃለሁ እና መልስ መስጠት ይችላሉ",
|
||||
"start_practice": "ልምምድ ጀምር",
|
||||
"almost_there": "ሊጨርሱ ተቃርበዋል",
|
||||
"finish_session": "እድገትዎን ለማየት ክፍለ ጊዜውን ያጠናቅቁ",
|
||||
"continue_practice": "ልምምዱን ይቀጥሉ",
|
||||
"end_session": "ክፍለ ጊዜውን ያብቁ ",
|
||||
"tap_start_to_listen": "ለማዳመጥ የጀምር ቁልፉን ይጫኑ",
|
||||
"practice_speaking": "ንግግርን ይለማመዱ",
|
||||
"tap_microphone": "ለመናገር ማይክሮፎኑን ይጫኑ",
|
||||
"reply": "እንደገና አዳምጥ",
|
||||
"cancel": "ይቅር",
|
||||
"you_are_speaking": "እየተናገሩ ነው",
|
||||
"practice_completed": "ልምምዱ ተጠናቅቋል",
|
||||
"great_improvement": "በዚህኛው በራስ መተማመንዎ ጨምሯል፤ ትልቅ መሻሻል ነው",
|
||||
"practice_again": "እንደገና ይለማመዱ",
|
||||
"conversation_review": "የንግግር ግምገማ",
|
||||
"result": "ውጤት",
|
||||
"quick_tip": "ጠቃሚ ምክር",
|
||||
"retry": "እንደገና ይሞክሩ",
|
||||
"completed_a1": "እንኳን ደስ አለዎት! A1 ደረጃን አጠናቅቀዋል",
|
||||
"analyzing_speaking": "የንግግር ችሎታዎን እየገመገምን ነው",
|
||||
"view_profile": "ፕሮፋይሎን ይመልከቱ ",
|
||||
"hi": "ሰላም",
|
||||
"edit_profile": "መገለጫ ያስተካክሉ",
|
||||
"first_name": "የመጀመሪያ ስም",
|
||||
"last_name": "የአባት ስም",
|
||||
"gender": "ፆታ",
|
||||
"male": "ወንድ",
|
||||
"female": "ሴት",
|
||||
"phone_number": "የስልክ ቁጥር",
|
||||
"country": "ሀገር",
|
||||
"region": "ክልል",
|
||||
"select_region": "ክልል ይምረጡ",
|
||||
"enter_your_city": "ከተማዎን ያስገቡ",
|
||||
"occupation": "የስራ መስክ",
|
||||
"select_occupation": "ሙያዎን ይምረጡ",
|
||||
"save_changes": "ለውጦችን ያስቀምጡ",
|
||||
"my_progress": "የእኔ እድገት",
|
||||
"track_your_achievement": "ስኬቶችዎን እና ተከታታይ የትምህርት ጉዞዎን ይከታተሉ",
|
||||
"account_and_privacy": "መለያ እና ግላዊነት",
|
||||
"manage_settings": "ቅንብሮችን እና የመተግበሪያ ምርጫዎችን ያስተዳድሩ",
|
||||
"support": "ድጋፍ",
|
||||
"get_help": "በስልክ ወይም በቴሌግራም እገዛ ያግኙ",
|
||||
"logout": "ውጣ",
|
||||
"app_settings": "የመተግበሪያ ቅንብሮች",
|
||||
"legal_and_information": "ሕጋዊ እና መረጃ",
|
||||
"change_language": "ቋንቋ ቀይር",
|
||||
"terms_and_conditions": "ውሎች እና ሁኔታዎች",
|
||||
"delete_account": "መለያ ሰርዝ",
|
||||
"language_preference": "የቋንቋ ምርጫ",
|
||||
"choose_your_language": "ለውጦችን አስቀምጥ",
|
||||
"switch_language_anytime": "ቋንቋዎችን በማንኛውም ጊዜ መቀየር ይችላሉ",
|
||||
"need_help": "እገዛ ይፈልጋሉ?",
|
||||
"call_support": "የስልክ ድጋፍ",
|
||||
"talk_with_support": "በቀጥታ ከድጋፍ ቡድናችን ጋር ይነጋገሩ",
|
||||
"telegram_support": "የቴሌግራም ድጋፍ",
|
||||
"chat_via_telegram": "በቴሌግራም በፍጥነት ይወያዩ",
|
||||
"call_our_support": "ከ3 ጠዋት እስከ 12 ማታ ድረስ የድጋፍ ቡድናችንን ይደውሉ",
|
||||
"tap_to_call": "ለመደወል ይንኩ",
|
||||
"join_telegram": "በቴሌግራም የይማሩ አካዳሚን ይቀላቀሉ",
|
||||
"connect_with_support_team":
|
||||
"ለፈጣን እርዳታ እና የማህበረሰብ ዝማኔዎች፣ በቴሌግራም ከድጋፍ ቡድናችን ጋር ወዲያውኑ ይገናኙ።",
|
||||
"open_in_telegram": "በቴሌግራም ይክፈቱ",
|
||||
"search_for": "ፈልጉት",
|
||||
"current_level": "የአሁኑ ደረጃ",
|
||||
"keep_up_the_great_work": "በጣም ጥሩ እየሰራህ ነው! ቀጥልበት፣ አስደናቂ ነህ።",
|
||||
"no_practice_available": "ምንም ልምምድ አልተገኘም!",
|
||||
"begin_module_practice": "የሞጁሉን ልምምድ ጀምር",
|
||||
"lets_practice_lesson": "እንለማመድ",
|
||||
"lets_quickly_review": "በዚህ ሞጁል ውስጥ የተማርከውን በፍጥነት እንከልስ!",
|
||||
"lets_practice_module": "አሁን የተማርከውን እንለማመድ!",
|
||||
"ask_you_few_actions": "ጥቂት ጥያቄዎችን እጠይቅሃለሁ፣ አንተም በተፈጥሮ መልስ ልትሰጥ ትችላለህ።",
|
||||
"begin_level_practice": "የደረጃ ልምምድን ጀምር",
|
||||
"lets_practice_course": "የኮርሱን ልምምድ እንለማመድ",
|
||||
"lets_quick_review": "በዚህ ደረጃ የተማርከውን በፍጥነት እንከልስ!",
|
||||
"speaking": "እየተናገረ ነው",
|
||||
"you_have_finished_practice": "ልምምድህን አጠናቀቅህ",
|
||||
"view_results": "ውጤቶቼን እይ",
|
||||
"sample_answer": "ናሙና መልስ",
|
||||
"your_answer": "መልስህ",
|
||||
"sound_confident": "በዚህ ጊዜ የበለጠ እምነት ያለህ ይመስላል — በጣም ጥሩ መሻሻል ነው!",
|
||||
"you_have_completed": "አያይ! አጠናቀቅህ",
|
||||
"yes": "አዎ",
|
||||
"no": "አይ",
|
||||
"want_to_quit": "ለመውጣት እርግጠኛ ነህ?",
|
||||
"required_field": "ይህ መስክ ያስፈልጋል",
|
||||
"enter_full_name": "ሙሉ ስምህን አስገባ",
|
||||
"invalid_email": "የማይሰራ የኢሜይል ቅርጸት",
|
||||
"phone_must_start_with": "የስልክ ቁጥር በ251 መጀመር አለበት",
|
||||
"phone_must_be": "የስልክ ቁጥር 12 አሃዞች መሆን አለበት",
|
||||
"what_should_we_call_you": "ምን ብለን እንጠራህ?",
|
||||
"name_for_personalization": "በመማር ጉዞህ ውስጥ ለግል ለማድረግ ስምህን እንጠቀማለን።",
|
||||
"choose_your_gender": "ጾታህን ምረጥ",
|
||||
"gender_for_personalization": "በጾታህ መሰረት የመማር ተሞክሮህን እናበጅለታለን።",
|
||||
"age_range": "በየትኛው የእድሜ ክልል ውስጥ ነህ?",
|
||||
"age_for_personalization": "በእድሜህ መሰረት የመማር ተሞክሮህን እናበጅለታለን።",
|
||||
"educational_background": "አሁን ያለህ የትምህርት ደረጃ ምንድን ነው?",
|
||||
"education_for_personalization": "ይህ ትምህርቶችን ከልምድህ ጋር እንዲስማሙ ለማድረግ ይረዳናል።",
|
||||
"your_occupation": "ስራህ ምንድን ነው?",
|
||||
"occupation_for_personalization": "በስራህ መሰረት የመማር ተሞክሮህን እናበጅለታለን።",
|
||||
"location": "ከየት ነህ?",
|
||||
"select_country_region": "አገርህን እና ክልልህን ከተቆልቋይ ዝርዝሩ ምረጥ",
|
||||
"select_country": "አገር ምረጥ",
|
||||
"learning_goal": "የመማር ዓላማህን ምረጥ",
|
||||
"language_goal": "እንግሊዝኛህን ለማሻሻል ዋና ዓላማህ ምንድን ነው?",
|
||||
"your_goal": "ዓላማህ የመማር ጉዞህን እንዲስማማ ለማድረግ ይረዳናል።",
|
||||
"write_your_goal": "ዓላማህን ጻፍ…",
|
||||
"challenge_you_face": "What challenge do you face most with English?",
|
||||
"evey_one_has_strugle": "ሁሉም ሰው ችግሮች አሉት፣ የአንተን እንጀምር እንፍታ",
|
||||
"write_your_challenge": "ችግርህን ጻፍ…",
|
||||
"topic_interest": "በጣም የሚስቡህ ርዕሶች የትኞቹ ናቸው?",
|
||||
"favourite_topic":
|
||||
"የምትወዳቸው ርዕሶች አስደሳች እና ከሕይወትህ ጋር የተዛመዱ ትምህርቶችን ለመፍጠር ይረዱናል።",
|
||||
"your_interest": "ፍላጎትህን ጻፍ…",
|
||||
"want_quick_assessment": "የእንግሊዝኛ ደረጃህን ለማወቅ ፈጣን ግምገማ ትፈልጋለህ?",
|
||||
"answer_quick_questions": "የእንግሊዝኛ ችሎታህን ለመረዳት ጥቂት ፈጣን ጥያቄዎችን መልስ።",
|
||||
"skip": "ዝለል",
|
||||
"finish_level": "ደረጃውን አጠናቅቅ",
|
||||
"likely_speaker": "አንተ ምናልባት ተናጋሪ ነህ",
|
||||
"great_job": "በጣም ጥሩ ስራ! ለመሻሻል ቀጣዩ ደረጃህ ይኸው ነው።",
|
||||
"lets_start_practice": "ልምምድህን እንጀምር",
|
||||
"welcome_abroad": "እንኳን ደህና መጣህ",
|
||||
"ready_to_explore": "የግል ትምህርቶችህን ለማሰስ ዝግጁ ነህ።",
|
||||
"finish": "አጠናቅቅ",
|
||||
"finish_all_practice": "ልምምዱን ለመውሰድ በትምህርቶቹ ውስጥ ያሉትን ሁሉንም ልምምዶች ያጠናቅቁ።"
|
||||
};
|
||||
static const Map<String, dynamic> _en = {
|
||||
"loading": "Loading",
|
||||
"welcome_back": "Welcome back",
|
||||
"checking_user_info": "Checking user info",
|
||||
"dont_have_account": "Don't have an account?",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"forgot_password": "Forgot password?",
|
||||
"cont": "Continue",
|
||||
"register": "Register",
|
||||
"login_with_google": "Login with Google",
|
||||
"or": "Or",
|
||||
"login_with_phone": "Login with phone number",
|
||||
"create_account": "Create an account",
|
||||
"already_have_account": "Already have an account?",
|
||||
"login": "Login",
|
||||
"register_with_google": "Register with Google",
|
||||
"register_with_phone": "Register with phone number",
|
||||
"enter_phone_number":
|
||||
"Enter your phone number. We will send you a confirmation code there.",
|
||||
"login_with_email": "Login with email",
|
||||
"create_password": "Create password",
|
||||
"confirm_password": "Confirm password",
|
||||
"eight_character_minimum": "8 characters minimum",
|
||||
"password_match": "password match",
|
||||
"sign_up_agreement":
|
||||
"By clicking ‘Sign Up’, you agree to our ‘Terms of Service’ and ‘Privacy Policy’",
|
||||
"terms_of_services": "Terms of Service",
|
||||
"and": "and",
|
||||
"privacy_policy": "Privacy Policy",
|
||||
"register_with_email": "Register with email",
|
||||
"verification_code": "Verification Code",
|
||||
"resend_code": "Resend Code",
|
||||
"code_sent_to_phone": "Code sent to your number",
|
||||
"code_sent_to_email": "Code sent to your email",
|
||||
"resend_code_in": "Resend code in",
|
||||
"reset_password": "Reset Password",
|
||||
"enter_email_reset_code":
|
||||
"Enter your email. We will send you a reset code.",
|
||||
"please_wait": "Please wait",
|
||||
"reset_code_sent": "Reset code sent successfully",
|
||||
"reset_code": "Reset code",
|
||||
"new_password": "New password",
|
||||
"logged_in_successfully": "Logged in successfully",
|
||||
"continue_learning": "Continue Learning",
|
||||
"start_learning": "Start Learning",
|
||||
"completed": "Completed",
|
||||
"view_course": "View course",
|
||||
"take_practice": "Take practice",
|
||||
"your_current_level": "Your current level",
|
||||
"overall_progress": "Overall progress",
|
||||
"great_work": "Keep up the great work! You're doing amazing",
|
||||
"view_module": "View module",
|
||||
"progress": "Progress",
|
||||
"keep_going": "Let's keep going - you're more than half there",
|
||||
"lessons_in_module": "Lessons in this module",
|
||||
"practice": "Practice",
|
||||
"start": "Start",
|
||||
"in_progress": "In Progress",
|
||||
"hello": "Hello",
|
||||
"ready_to_learn": "Ready to keep learning English today",
|
||||
"learn": "Learn",
|
||||
"course": "Course",
|
||||
"profile": "Profile",
|
||||
"speaking_partner": "Speaking partner",
|
||||
"practice_what_you_learned": "Let's practice what you just learnt",
|
||||
"practice_questions": "I will ask you a few questions and you can respond",
|
||||
"start_practice": "Start practice",
|
||||
"almost_there": "You're almost there",
|
||||
"finish_session": "Finish the session to see your progress",
|
||||
"continue_practice": "Continue practice",
|
||||
"end_session": "End session",
|
||||
"tap_start_to_listen": "Tap the start button to listen",
|
||||
"practice_speaking": "Practice speaking",
|
||||
"tap_microphone": "Tap the microphone to speak",
|
||||
"reply": "Reply",
|
||||
"cancel": "Cancel",
|
||||
"you_are_speaking": "You're speaking",
|
||||
"practice_completed": "Practice completed!",
|
||||
"great_improvement":
|
||||
"You sound more confident this time, great improvement",
|
||||
"practice_again": "Practice again",
|
||||
"conversation_review": "Conversation review",
|
||||
"result": "Result",
|
||||
"quick_tip": "Quick tip",
|
||||
"retry": "Retry",
|
||||
"completed_a1": "Yay, you've completed A1",
|
||||
"analyzing_speaking": "We're now analyzing your speaking skill",
|
||||
"view_profile": "View profile",
|
||||
"hi": "Hi",
|
||||
"edit_profile": "Edit profile",
|
||||
"first_name": "First name",
|
||||
"last_name": "Last name",
|
||||
"gender": "Gender",
|
||||
"male": "Male",
|
||||
"female": "Female",
|
||||
"phone_number": "Phone number",
|
||||
"country": "Country",
|
||||
"region": "Region",
|
||||
"select_region": "Select region",
|
||||
"enter_your_city": "Enter your city",
|
||||
"occupation": "Occupation",
|
||||
"select_occupation": "Select occupation",
|
||||
"save_changes": "Save changes",
|
||||
"my_progress": "My progress",
|
||||
"track_your_achievement": "Track your achievements and learning streak",
|
||||
"account_and_privacy": "Account & Privacy",
|
||||
"manage_settings": "Manage settings and app preference",
|
||||
"support": "Support",
|
||||
"get_help": "Get help through phone or Telegram",
|
||||
"logout": "Logout",
|
||||
"app_settings": "App settings",
|
||||
"legal_and_information": "Legal & Information",
|
||||
"change_language": "Change language",
|
||||
"terms_and_conditions": "Terms & Conditions",
|
||||
"delete_account": "Delete account",
|
||||
"language_preference": "Language preference",
|
||||
"choose_your_language": "Choose your language",
|
||||
"switch_language_anytime": "You can switch languages anytime",
|
||||
"need_help": "Need help?",
|
||||
"call_support": "Call support",
|
||||
"talk_with_support": "Talk with our support team directly",
|
||||
"telegram_support": "Telegram support",
|
||||
"chat_via_telegram": "Chat instantly via Telegram",
|
||||
"call_our_support": "Call our support team between 9 AM - 6 PM",
|
||||
"tap_to_call": "Tap to call",
|
||||
"join_telegram": "Join Yimaru Academy on Telegram",
|
||||
"connect_with_support_team":
|
||||
"Connect with our support team instantly on Telegram for quick assistance and community updates",
|
||||
"open_in_telegram": "Open in Telegram",
|
||||
"search_for": "Search for",
|
||||
"current_level": "Current Level",
|
||||
"keep_up_the_great_work": "Keep up the great work! You're doing amazing.",
|
||||
"no_practice_available": "No practice available!",
|
||||
"begin_module_practice": "Begin Module Practice",
|
||||
"lets_practice_lesson": "Let’s Practice",
|
||||
"lets_quickly_review":
|
||||
"Let’s quickly review what you’ve learned in this module!",
|
||||
"lets_practice_module": "Let's practice what you just learnt!",
|
||||
"ask_you_few_actions":
|
||||
"I’ll ask you a few questions, and you can respond naturally.",
|
||||
"begin_level_practice": "Begin Level Practice",
|
||||
"lets_practice_course": "Let’s Practice Course",
|
||||
"lets_quick_review":
|
||||
"Let’s quickly review what you’ve learned in this level!",
|
||||
"speaking": "is speaking...",
|
||||
"you_have_finished_practice": "You have finished your practice",
|
||||
"view_results": "View My Results",
|
||||
"sample_answer": "Sample Answer",
|
||||
"your_answer": "Your Answer",
|
||||
"sound_confident":
|
||||
"You sound more confident this time - great improvement!",
|
||||
"you_have_completed": "Yay, you’ve completed",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"want_to_quit": "Are you sure you want to quit?",
|
||||
"required_field": "The field is required",
|
||||
"enter_full_name": "Enter your full name",
|
||||
"invalid_email": "Invalid email format",
|
||||
"phone_must_start_with": "Phone number must start with 251",
|
||||
"phone_must_be": "Phone number must be 12 digits",
|
||||
"what_should_we_call_you": "What should we call you?",
|
||||
"name_for_personalization":
|
||||
"We’ll use your name to personalize your learning journey.",
|
||||
"choose_your_gender": "Choose your gender?",
|
||||
"gender_for_personalization":
|
||||
"We’ll personalize your learning experience based on your gender.",
|
||||
"age_range": "Which age range are you in?",
|
||||
"age_for_personalization":
|
||||
"We’ll personalize your learning experience based on your age.",
|
||||
"educational_background": "What’s your current educational level?",
|
||||
"education_for_personalization":
|
||||
"This helps us tailor your lessons to your experience.",
|
||||
"your_occupation": "What’s your occupation?",
|
||||
"occupation_for_personalization":
|
||||
"We’ll personalize your learning experience based on your occupation.",
|
||||
"location": "Where are you from?",
|
||||
"select_country_region": "Select your country and region from the dropdown",
|
||||
"select_country": "Select country",
|
||||
"learning_goal": "Choose your learning goal.",
|
||||
"language_goal": "What’s your main goal for improving your English?",
|
||||
"your_goal": "Your goal helps us tailor your learning journey.",
|
||||
"write_your_goal": "Write your goal…",
|
||||
"challenge_you_face": "What challenge do you face most with English?",
|
||||
"evey_one_has_strugle": "Everyone has struggles, let’s start fixing yours",
|
||||
"write_your_challenge": "Write your challenge…",
|
||||
"topic_interest": "Which topics interest you most?",
|
||||
"favourite_topic":
|
||||
"Your favorite topics help us create fun, relatable lessons.",
|
||||
"your_interest": "Write your interest…",
|
||||
"want_quick_assessment":
|
||||
"Want a quick assessment to know your English level?",
|
||||
"answer_quick_questions":
|
||||
"Answer a few quick questions to help us understand your English proficiency.",
|
||||
"skip": "Skip",
|
||||
"finish_level": "Finish Level",
|
||||
"likely_speaker": "You’re likely speaker of",
|
||||
"great_job": "Great Job! Here’s your next step to keep improving.",
|
||||
"lets_start_practice": "Let's start your practice",
|
||||
"welcome_abroad": "Welcome aboard",
|
||||
"ready_to_explore": "You’re ready to explore your personalized lessons.",
|
||||
"finish": "Finish",
|
||||
"finish_all_practice":
|
||||
"Finish all the practices in the lessons to take this practice"
|
||||
};
|
||||
static const Map<String, Map<String, dynamic>> mapLocales = {
|
||||
"am": _am,
|
||||
"en": _en
|
||||
};
|
||||
static const Map<String,dynamic> _am = {
|
||||
"loading": "በመጫን ላይ",
|
||||
"welcome_back": "እንኳን በደህና ተመለሱ",
|
||||
"checking_user_info": "የተጠቃሚ መረጃን በማረጋገጥ ላይ",
|
||||
"dont_have_account": "መለያ የለዎትም?",
|
||||
"email": "ኢሜይል",
|
||||
"password": "የይለፍ ቃል",
|
||||
"forgot_password": "የይለፍ ቃል ረሱ?",
|
||||
"cont": "ቀጥል",
|
||||
"register": "ይመዝገቡ",
|
||||
"login_with_google": "በጉግል ይግቡ",
|
||||
"or": "ወይም",
|
||||
"login_with_phone": "በስልክ ቁጥር ይግቡ",
|
||||
"create_account": "አዲስ መለያ ይፍጠሩ",
|
||||
"already_have_account": "መለያ አለዎት?",
|
||||
"login": " ይግቡ ",
|
||||
"register_with_google": "በጉግል ይመዝገቡ",
|
||||
"register_with_phone": "በስልክ ቁጥር ይመዝገቡ",
|
||||
"enter_phone_number": "የስልክ ቁጥርዎን ያስገቡ። የማረጋገጫ ኮድ እንልክልዎታለን።",
|
||||
"login_with_email": "በኢሜይል ይግቡ",
|
||||
"create_password": "የይለፍ ቃል ይፍጠሩ",
|
||||
"confirm_password": "የይለፍ ቃል ያረጋግጡ",
|
||||
"eight_character_minimum": "ቢያንስ 8 ፊደላት",
|
||||
"password_match": "የይለፍ ቃሉ ተመሳስሏል",
|
||||
"sign_up_agreement": "‘ይመዝገቡ’ የሚለውን ሲጫኑ በ‘አገልግሎት ውሎች’ እና ‘በግላዊነት ፖሊሲ’ ይስማማሉ።",
|
||||
"terms_of_services": "የአገልግሎት ውሎች",
|
||||
"and": "እና",
|
||||
"privacy_policy": "የግላዊነት ፖሊሲ",
|
||||
"register_with_email": "በኢሜል ይመዝገቡ",
|
||||
"verification_code": "የማረጋገጫ ኮድ",
|
||||
"resend_code": "ኮዱን እንደገና ላክ",
|
||||
"code_sent_to_phone": "ኮዱ ወደ ስልክ ቁጥርዎ ተልኳል",
|
||||
"code_sent_to_email": "ኮዱ ወደ ኢሜል ተልኳል",
|
||||
"resend_code_in": "ኮዱን እንደገና ለመላክ የቀረው ጊዜ",
|
||||
"reset_password": " የይለፍ ቃልን ይቀይሩ",
|
||||
"enter_email_reset_code": "ኢሜይልዎን ያስገቡ። የይለፍ ቃል መለወጫ ኮድ እንልክልዎታለን።",
|
||||
"please_wait": "እባክዎ ይጠብቁ",
|
||||
"reset_code_sent": "የመቀየሪያ ኮድ በተሳካ ሁኔታ ተልኳል",
|
||||
"reset_code": " የመቀየሪያ ኮድ ",
|
||||
"new_password": "አዲስ የይለፍ ቃል",
|
||||
"logged_in_successfully": "በተሳካ ሁኔታ ገብተዋል",
|
||||
"view_course": " ኮርሱን ይመልከቱ",
|
||||
"continue_learning": "መማርን ይቀጥሉ",
|
||||
"start_learning": "ትምህርትን ይጀምሩ",
|
||||
"completed": "ተጠናቋል",
|
||||
"take_practice": "ልምምድ ያድርጉ",
|
||||
"your_current_level": "የአሁኑ ደረጃዎ",
|
||||
"overall_progress": "አጠቃላይ እድገት",
|
||||
"great_work": "በርቱ! በጣም ጥሩ እየሰሩ ነው",
|
||||
"view_module": "ሞጁሉን ይመልከቱ",
|
||||
"progress": "እድገት",
|
||||
"keep_going": "ይቀጥሉ - ከግማሽ በላይ ጨርሰዋል ",
|
||||
"lessons_in_module": "በዚህ ሞጁል ውስጥ ያሉ ትምህርቶች ",
|
||||
"practice": "ልምምድ",
|
||||
"start": "ጀምር",
|
||||
"in_progress": "በሂደት ላይ",
|
||||
"hello": "ሰላም",
|
||||
"ready_to_learn": " ዛሬ እንግሊዝኛ ለመማር ተዘጋጅተዋል? ",
|
||||
"learn": "ይማሩ ",
|
||||
"course": "ኮርስ",
|
||||
"profile": " ፕሮፋይል ",
|
||||
"speaking_partner": "የንግግር ጓደኛ",
|
||||
"practice_what_you_learned": "አሁን የተማሩትን እንለማመድ",
|
||||
"practice_questions": "ጥቂት ጥያቄዎችን እጠይቃለሁ እና መልስ መስጠት ይችላሉ",
|
||||
"start_practice": "ልምምድ ጀምር",
|
||||
"almost_there": "ሊጨርሱ ተቃርበዋል",
|
||||
"finish_session": "እድገትዎን ለማየት ክፍለ ጊዜውን ያጠናቅቁ",
|
||||
"continue_practice": "ልምምዱን ይቀጥሉ",
|
||||
"end_session": "ክፍለ ጊዜውን ያብቁ ",
|
||||
"tap_start_to_listen": "ለማዳመጥ የጀምር ቁልፉን ይጫኑ",
|
||||
"practice_speaking": "ንግግርን ይለማመዱ",
|
||||
"tap_microphone": "ለመናገር ማይክሮፎኑን ይጫኑ",
|
||||
"reply": "እንደገና አዳምጥ",
|
||||
"cancel": "ይቅር",
|
||||
"you_are_speaking": "እየተናገሩ ነው",
|
||||
"practice_completed": "ልምምዱ ተጠናቅቋል",
|
||||
"great_improvement": "በዚህኛው በራስ መተማመንዎ ጨምሯል፤ ትልቅ መሻሻል ነው",
|
||||
"practice_again": "እንደገና ይለማመዱ",
|
||||
"conversation_review": "የንግግር ግምገማ",
|
||||
"result": "ውጤት",
|
||||
"quick_tip": "ጠቃሚ ምክር",
|
||||
"retry": "እንደገና ይሞክሩ",
|
||||
"completed_a1": "እንኳን ደስ አለዎት! A1 ደረጃን አጠናቅቀዋል",
|
||||
"analyzing_speaking": "የንግግር ችሎታዎን እየገመገምን ነው",
|
||||
"view_profile": "ፕሮፋይሎን ይመልከቱ ",
|
||||
"hi": "ሰላም",
|
||||
"edit_profile": "መገለጫ ያስተካክሉ",
|
||||
"first_name": "የመጀመሪያ ስም",
|
||||
"last_name": "የአባት ስም",
|
||||
"gender": "ፆታ",
|
||||
"male": "ወንድ",
|
||||
"female": "ሴት",
|
||||
"phone_number": "የስልክ ቁጥር",
|
||||
"country": "ሀገር",
|
||||
"region": "ክልል",
|
||||
"select_region": "ክልል ይምረጡ",
|
||||
"enter_your_city": "ከተማዎን ያስገቡ",
|
||||
"occupation": "የስራ መስክ",
|
||||
"select_occupation": "ሙያዎን ይምረጡ",
|
||||
"save_changes": "ለውጦችን ያስቀምጡ",
|
||||
"my_progress": "የእኔ እድገት",
|
||||
"track_your_achievement": "ስኬቶችዎን እና ተከታታይ የትምህርት ጉዞዎን ይከታተሉ",
|
||||
"account_and_privacy": "መለያ እና ግላዊነት",
|
||||
"manage_settings": "ቅንብሮችን እና የመተግበሪያ ምርጫዎችን ያስተዳድሩ",
|
||||
"support": "ድጋፍ",
|
||||
"get_help": "በስልክ ወይም በቴሌግራም እገዛ ያግኙ",
|
||||
"logout": "ውጣ",
|
||||
"app_settings": "የመተግበሪያ ቅንብሮች",
|
||||
"legal_and_information": "ሕጋዊ እና መረጃ",
|
||||
"change_language": "ቋንቋ ቀይር",
|
||||
"terms_and_conditions": "ውሎች እና ሁኔታዎች",
|
||||
"delete_account": "መለያ ሰርዝ",
|
||||
"language_preference": "የቋንቋ ምርጫ",
|
||||
"choose_your_language": "ለውጦችን አስቀምጥ",
|
||||
"switch_language_anytime": "ቋንቋዎችን በማንኛውም ጊዜ መቀየር ይችላሉ",
|
||||
"need_help": "እገዛ ይፈልጋሉ?",
|
||||
"call_support": "የስልክ ድጋፍ",
|
||||
"talk_with_support": "በቀጥታ ከድጋፍ ቡድናችን ጋር ይነጋገሩ",
|
||||
"telegram_support": "የቴሌግራም ድጋፍ",
|
||||
"chat_via_telegram": "በቴሌግራም በፍጥነት ይወያዩ",
|
||||
"call_our_support": "ከ3 ጠዋት እስከ 12 ማታ ድረስ የድጋፍ ቡድናችንን ይደውሉ",
|
||||
"tap_to_call": "ለመደወል ይንኩ",
|
||||
"join_telegram": "በቴሌግራም የይማሩ አካዳሚን ይቀላቀሉ",
|
||||
"connect_with_support_team": "ለፈጣን እርዳታ እና የማህበረሰብ ዝማኔዎች፣ በቴሌግራም ከድጋፍ ቡድናችን ጋር ወዲያውኑ ይገናኙ።",
|
||||
"open_in_telegram": "በቴሌግራም ይክፈቱ",
|
||||
"search_for": "ፈልጉት",
|
||||
"current_level": "የአሁኑ ደረጃ",
|
||||
"keep_up_the_great_work": "በጣም ጥሩ እየሰራህ ነው! ቀጥልበት፣ አስደናቂ ነህ።",
|
||||
"no_practice_available": "ምንም ልምምድ አልተገኘም!",
|
||||
"begin_module_practice": "የሞጁሉን ልምምድ ጀምር",
|
||||
"lets_practice_lesson": "እንለማመድ",
|
||||
"lets_quickly_review": "በዚህ ሞጁል ውስጥ የተማርከውን በፍጥነት እንከልስ!",
|
||||
"lets_practice_module": "አሁን የተማርከውን እንለማመድ!",
|
||||
"ask_you_few_actions": "ጥቂት ጥያቄዎችን እጠይቅሃለሁ፣ አንተም በተፈጥሮ መልስ ልትሰጥ ትችላለህ።",
|
||||
"begin_level_practice": "የደረጃ ልምምድን ጀምር",
|
||||
"lets_practice_course": "የኮርሱን ልምምድ እንለማመድ",
|
||||
"lets_quick_review": "በዚህ ደረጃ የተማርከውን በፍጥነት እንከልስ!",
|
||||
"speaking": "እየተናገረ ነው",
|
||||
"you_have_finished_practice": "ልምምድህን አጠናቀቅህ",
|
||||
"view_results": "ውጤቶቼን እይ",
|
||||
"sample_answer": "ናሙና መልስ",
|
||||
"your_answer": "መልስህ",
|
||||
"sound_confident": "በዚህ ጊዜ የበለጠ እምነት ያለህ ይመስላል — በጣም ጥሩ መሻሻል ነው!",
|
||||
"you_have_completed": "አያይ! አጠናቀቅህ",
|
||||
"yes": "አዎ",
|
||||
"no": "አይ",
|
||||
"want_to_quit": "ለመውጣት እርግጠኛ ነህ?",
|
||||
"required_field": "ይህ መስክ ያስፈልጋል",
|
||||
"enter_full_name": "ሙሉ ስምህን አስገባ",
|
||||
"invalid_email": "የማይሰራ የኢሜይል ቅርጸት",
|
||||
"phone_must_start_with": "የስልክ ቁጥር በ251 መጀመር አለበት",
|
||||
"phone_must_be": "የስልክ ቁጥር 12 አሃዞች መሆን አለበት",
|
||||
"what_should_we_call_you": "ምን ብለን እንጠራህ?",
|
||||
"name_for_personalization": "በመማር ጉዞህ ውስጥ ለግል ለማድረግ ስምህን እንጠቀማለን።",
|
||||
"choose_your_gender": "ጾታህን ምረጥ",
|
||||
"gender_for_personalization": "በጾታህ መሰረት የመማር ተሞክሮህን እናበጅለታለን።",
|
||||
"age_range": "በየትኛው የእድሜ ክልል ውስጥ ነህ?",
|
||||
"age_for_personalization": "በእድሜህ መሰረት የመማር ተሞክሮህን እናበጅለታለን።",
|
||||
"educational_background": "አሁን ያለህ የትምህርት ደረጃ ምንድን ነው?",
|
||||
"education_for_personalization": "ይህ ትምህርቶችን ከልምድህ ጋር እንዲስማሙ ለማድረግ ይረዳናል።",
|
||||
"your_occupation": "ስራህ ምንድን ነው?",
|
||||
"occupation_for_personalization": "በስራህ መሰረት የመማር ተሞክሮህን እናበጅለታለን።",
|
||||
"location": "ከየት ነህ?",
|
||||
"select_country_region": "አገርህን እና ክልልህን ከተቆልቋይ ዝርዝሩ ምረጥ",
|
||||
"select_country": "አገር ምረጥ",
|
||||
"learning_goal": "የመማር ዓላማህን ምረጥ",
|
||||
"language_goal": "እንግሊዝኛህን ለማሻሻል ዋና ዓላማህ ምንድን ነው?",
|
||||
"your_goal": "ዓላማህ የመማር ጉዞህን እንዲስማማ ለማድረግ ይረዳናል።",
|
||||
"write_your_goal": "ዓላማህን ጻፍ…",
|
||||
"challenge_you_face": "What challenge do you face most with English?",
|
||||
"evey_one_has_strugle": "ሁሉም ሰው ችግሮች አሉት፣ የአንተን እንጀምር እንፍታ",
|
||||
"write_your_challenge": "ችግርህን ጻፍ…",
|
||||
"topic_interest": "በጣም የሚስቡህ ርዕሶች የትኞቹ ናቸው?",
|
||||
"favourite_topic": "የምትወዳቸው ርዕሶች አስደሳች እና ከሕይወትህ ጋር የተዛመዱ ትምህርቶችን ለመፍጠር ይረዱናል።",
|
||||
"your_interest": "ፍላጎትህን ጻፍ…",
|
||||
"want_quick_assessment": "የእንግሊዝኛ ደረጃህን ለማወቅ ፈጣን ግምገማ ትፈልጋለህ?",
|
||||
"answer_quick_questions": "የእንግሊዝኛ ችሎታህን ለመረዳት ጥቂት ፈጣን ጥያቄዎችን መልስ።",
|
||||
"skip": "ዝለል",
|
||||
"finish_level": "ደረጃውን አጠናቅቅ",
|
||||
"likely_speaker": "አንተ ምናልባት ተናጋሪ ነህ",
|
||||
"great_job": "በጣም ጥሩ ስራ! ለመሻሻል ቀጣዩ ደረጃህ ይኸው ነው።",
|
||||
"lets_start_practice": "ልምምድህን እንጀምር",
|
||||
"welcome_abroad": "እንኳን ደህና መጣህ",
|
||||
"ready_to_explore": "የግል ትምህርቶችህን ለማሰስ ዝግጁ ነህ።",
|
||||
"finish": "አጠናቅቅ",
|
||||
"finish_all_practice_lesson": "ይህን ልምምድ ለመውሰድ የቀድሞውን የትምህርት ልምምድ ያጠናቅቁ",
|
||||
"finish_all_practice_module": "የሞጁሉን ልምምድ ለመውሰድ የትምህርት ልምምዶችን ያጠናቅቁ",
|
||||
"finish_all_practice_course": "የኮርሱን ልምምድ ለመውሰድ የሞጁል ልምምዶችን ያጠናቅቁ",
|
||||
"finish_all_practice_previouse_module": "ይህን ልምምድ ለመውሰድ የቀድሞውን የሞጁል ልምምድ ያጠናቅቁ",
|
||||
"finish_all_practice_previouse_course": "ይህን ለመውሰድ የቀድሞውን የኮርስ ልምምድ ያጠናቅቁ"
|
||||
};
|
||||
static const Map<String,dynamic> _en = {
|
||||
"loading": "Loading",
|
||||
"welcome_back": "Welcome back",
|
||||
"checking_user_info": "Checking user info",
|
||||
"dont_have_account": "Don't have an account?",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"forgot_password": "Forgot password?",
|
||||
"cont": "Continue",
|
||||
"register": "Register",
|
||||
"login_with_google": "Login with Google",
|
||||
"or": "Or",
|
||||
"login_with_phone": "Login with phone number",
|
||||
"create_account": "Create an account",
|
||||
"already_have_account": "Already have an account?",
|
||||
"login": "Login",
|
||||
"register_with_google": "Register with Google",
|
||||
"register_with_phone": "Register with phone number",
|
||||
"enter_phone_number": "Enter your phone number. We will send you a confirmation code there.",
|
||||
"login_with_email": "Login with email",
|
||||
"create_password": "Create password",
|
||||
"confirm_password": "Confirm password",
|
||||
"eight_character_minimum": "8 characters minimum",
|
||||
"password_match": "password match",
|
||||
"sign_up_agreement": "By clicking ‘Sign Up’, you agree to our ‘Terms of Service’ and ‘Privacy Policy’",
|
||||
"terms_of_services": "Terms of Service",
|
||||
"and": "and",
|
||||
"privacy_policy": "Privacy Policy",
|
||||
"register_with_email": "Register with email",
|
||||
"verification_code": "Verification Code",
|
||||
"resend_code": "Resend Code",
|
||||
"code_sent_to_phone": "Code sent to your number",
|
||||
"code_sent_to_email": "Code sent to your email",
|
||||
"resend_code_in": "Resend code in",
|
||||
"reset_password": "Reset Password",
|
||||
"enter_email_reset_code": "Enter your email. We will send you a reset code.",
|
||||
"please_wait": "Please wait",
|
||||
"reset_code_sent": "Reset code sent successfully",
|
||||
"reset_code": "Reset code",
|
||||
"new_password": "New password",
|
||||
"logged_in_successfully": "Logged in successfully",
|
||||
"continue_learning": "Continue Learning",
|
||||
"start_learning": "Start Learning",
|
||||
"completed": "Completed",
|
||||
"view_course": "View course",
|
||||
"take_practice": "Take practice",
|
||||
"your_current_level": "Your current level",
|
||||
"overall_progress": "Overall progress",
|
||||
"great_work": "Keep up the great work! You're doing amazing",
|
||||
"view_module": "View module",
|
||||
"progress": "Progress",
|
||||
"keep_going": "Let's keep going - you're more than half there",
|
||||
"lessons_in_module": "Lessons in this module",
|
||||
"practice": "Practice",
|
||||
"start": "Start",
|
||||
"in_progress": "In Progress",
|
||||
"hello": "Hello",
|
||||
"ready_to_learn": "Ready to keep learning English today",
|
||||
"learn": "Learn",
|
||||
"course": "Course",
|
||||
"profile": "Profile",
|
||||
"speaking_partner": "Speaking partner",
|
||||
"practice_what_you_learned": "Let's practice what you just learnt",
|
||||
"practice_questions": "I will ask you a few questions and you can respond",
|
||||
"start_practice": "Start practice",
|
||||
"almost_there": "You're almost there",
|
||||
"finish_session": "Finish the session to see your progress",
|
||||
"continue_practice": "Continue practice",
|
||||
"end_session": "End session",
|
||||
"tap_start_to_listen": "Tap the start button to listen",
|
||||
"practice_speaking": "Practice speaking",
|
||||
"tap_microphone": "Tap the microphone to speak",
|
||||
"reply": "Reply",
|
||||
"cancel": "Cancel",
|
||||
"you_are_speaking": "You're speaking",
|
||||
"practice_completed": "Practice completed!",
|
||||
"great_improvement": "You sound more confident this time, great improvement",
|
||||
"practice_again": "Practice again",
|
||||
"conversation_review": "Conversation review",
|
||||
"result": "Result",
|
||||
"quick_tip": "Quick tip",
|
||||
"retry": "Retry",
|
||||
"completed_a1": "Yay, you've completed A1",
|
||||
"analyzing_speaking": "We're now analyzing your speaking skill",
|
||||
"view_profile": "View profile",
|
||||
"hi": "Hi",
|
||||
"edit_profile": "Edit profile",
|
||||
"first_name": "First name",
|
||||
"last_name": "Last name",
|
||||
"gender": "Gender",
|
||||
"male": "Male",
|
||||
"female": "Female",
|
||||
"phone_number": "Phone number",
|
||||
"country": "Country",
|
||||
"region": "Region",
|
||||
"select_region": "Select region",
|
||||
"enter_your_city": "Enter your city",
|
||||
"occupation": "Occupation",
|
||||
"select_occupation": "Select occupation",
|
||||
"save_changes": "Save changes",
|
||||
"my_progress": "My progress",
|
||||
"track_your_achievement": "Track your achievements and learning streak",
|
||||
"account_and_privacy": "Account & Privacy",
|
||||
"manage_settings": "Manage settings and app preference",
|
||||
"support": "Support",
|
||||
"get_help": "Get help through phone or Telegram",
|
||||
"logout": "Logout",
|
||||
"app_settings": "App settings",
|
||||
"legal_and_information": "Legal & Information",
|
||||
"change_language": "Change language",
|
||||
"terms_and_conditions": "Terms & Conditions",
|
||||
"delete_account": "Delete account",
|
||||
"language_preference": "Language preference",
|
||||
"choose_your_language": "Choose your language",
|
||||
"switch_language_anytime": "You can switch languages anytime",
|
||||
"need_help": "Need help?",
|
||||
"call_support": "Call support",
|
||||
"talk_with_support": "Talk with our support team directly",
|
||||
"telegram_support": "Telegram support",
|
||||
"chat_via_telegram": "Chat instantly via Telegram",
|
||||
"call_our_support": "Call our support team between 9 AM - 6 PM",
|
||||
"tap_to_call": "Tap to call",
|
||||
"join_telegram": "Join Yimaru Academy on Telegram",
|
||||
"connect_with_support_team": "Connect with our support team instantly on Telegram for quick assistance and community updates",
|
||||
"open_in_telegram": "Open in Telegram",
|
||||
"search_for": "Search for",
|
||||
"current_level": "Current Level",
|
||||
"keep_up_the_great_work": "Keep up the great work! You're doing amazing.",
|
||||
"no_practice_available": "No practice available!",
|
||||
"begin_module_practice": "Begin Module Practice",
|
||||
"lets_practice_lesson": "Let’s Practice",
|
||||
"lets_quickly_review": "Let’s quickly review what you’ve learned in this module!",
|
||||
"lets_practice_module": "Let's practice what you just learnt!",
|
||||
"ask_you_few_actions": "I’ll ask you a few questions, and you can respond naturally.",
|
||||
"begin_level_practice": "Begin Level Practice",
|
||||
"lets_practice_course": "Let’s Practice Course",
|
||||
"lets_quick_review": "Let’s quickly review what you’ve learned in this level!",
|
||||
"speaking": "is speaking...",
|
||||
"you_have_finished_practice": "You have finished your practice",
|
||||
"view_results": "View My Results",
|
||||
"sample_answer": "Sample Answer",
|
||||
"your_answer": "Your Answer",
|
||||
"sound_confident": "You sound more confident this time - great improvement!",
|
||||
"you_have_completed": "Yay, you’ve completed",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"want_to_quit": "Are you sure you want to quit?",
|
||||
"required_field": "The field is required",
|
||||
"enter_full_name": "Enter your full name",
|
||||
"invalid_email": "Invalid email format",
|
||||
"phone_must_start_with": "Phone number must start with 251",
|
||||
"phone_must_be": "Phone number must be 12 digits",
|
||||
"what_should_we_call_you": "What should we call you?",
|
||||
"name_for_personalization": "We’ll use your name to personalize your learning journey.",
|
||||
"choose_your_gender": "Choose your gender?",
|
||||
"gender_for_personalization": "We’ll personalize your learning experience based on your gender.",
|
||||
"age_range": "Which age range are you in?",
|
||||
"age_for_personalization": "We’ll personalize your learning experience based on your age.",
|
||||
"educational_background": "What’s your current educational level?",
|
||||
"education_for_personalization": "This helps us tailor your lessons to your experience.",
|
||||
"your_occupation": "What’s your occupation?",
|
||||
"occupation_for_personalization": "We’ll personalize your learning experience based on your occupation.",
|
||||
"location": "Where are you from?",
|
||||
"select_country_region": "Select your country and region from the dropdown",
|
||||
"select_country": "Select country",
|
||||
"learning_goal": "Choose your learning goal.",
|
||||
"language_goal": "What’s your main goal for improving your English?",
|
||||
"your_goal": "Your goal helps us tailor your learning journey.",
|
||||
"write_your_goal": "Write your goal…",
|
||||
"challenge_you_face": "What challenge do you face most with English?",
|
||||
"evey_one_has_strugle": "Everyone has struggles, let’s start fixing yours",
|
||||
"write_your_challenge": "Write your challenge…",
|
||||
"topic_interest": "Which topics interest you most?",
|
||||
"favourite_topic": "Your favorite topics help us create fun, relatable lessons.",
|
||||
"your_interest": "Write your interest…",
|
||||
"want_quick_assessment": "Want a quick assessment to know your English level?",
|
||||
"answer_quick_questions": "Answer a few quick questions to help us understand your English proficiency.",
|
||||
"skip": "Skip",
|
||||
"finish_level": "Finish Level",
|
||||
"likely_speaker": "You’re likely speaker of",
|
||||
"great_job": "Great Job! Here’s your next step to keep improving.",
|
||||
"lets_start_practice": "Let's start your practice",
|
||||
"welcome_abroad": "Welcome aboard",
|
||||
"ready_to_explore": "You’re ready to explore your personalized lessons.",
|
||||
"finish": "Finish",
|
||||
"finish_all_practice_lesson": "Finish the previous lesson practice to take this practice",
|
||||
"finish_all_practice_module": "Finish the lesson practices to take the Module Practice",
|
||||
"finish_all_practice_course": "Finish the Module practices to take the Course practice",
|
||||
"finish_all_practice_previouse_module": "Finish the previous Module practice to take this practice",
|
||||
"finish_all_practice_previouse_course": "Finish the previous course practice to take this"
|
||||
};
|
||||
static const Map<String, Map<String,dynamic>> mapLocales = {"am": _am, "en": _en};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// ignore_for_file: constant_identifier_names
|
||||
|
||||
abstract class LocaleKeys {
|
||||
abstract class LocaleKeys {
|
||||
static const loading = 'loading';
|
||||
static const welcome_back = 'welcome_back';
|
||||
static const checking_user_info = 'checking_user_info';
|
||||
|
|
@ -161,8 +161,7 @@ abstract class LocaleKeys {
|
|||
static const educational_background = 'educational_background';
|
||||
static const education_for_personalization = 'education_for_personalization';
|
||||
static const your_occupation = 'your_occupation';
|
||||
static const occupation_for_personalization =
|
||||
'occupation_for_personalization';
|
||||
static const occupation_for_personalization = 'occupation_for_personalization';
|
||||
static const location = 'location';
|
||||
static const select_country_region = 'select_country_region';
|
||||
static const select_country = 'select_country';
|
||||
|
|
@ -186,5 +185,10 @@ abstract class LocaleKeys {
|
|||
static const welcome_abroad = 'welcome_abroad';
|
||||
static const ready_to_explore = 'ready_to_explore';
|
||||
static const finish = 'finish';
|
||||
static const finish_all_practice = 'finish_all_practice';
|
||||
static const finish_all_practice_lesson = 'finish_all_practice_lesson';
|
||||
static const finish_all_practice_module = 'finish_all_practice_module';
|
||||
static const finish_all_practice_course = 'finish_all_practice_course';
|
||||
static const finish_all_practice_previouse_module = 'finish_all_practice_previouse_module';
|
||||
static const finish_all_practice_previouse_course = 'finish_all_practice_previouse_course';
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,8 +53,8 @@ class ArifPayViewModel extends ReactiveViewModel {
|
|||
if (await _statusChecker.checkConnection()) {
|
||||
Map<String, dynamic> data = {
|
||||
'plan_id': 1,
|
||||
'provider': 'CHAPA',
|
||||
'phone': '251$phone',
|
||||
'provider': 'ARIFPAY',
|
||||
'email': 'test@gmail.com',
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -52,9 +52,9 @@ class AssessmentView extends StackedView<AssessmentViewModel> {
|
|||
];
|
||||
|
||||
Widget _buildAssessmentIntroWrapper(AssessmentViewModel viewModel) =>
|
||||
viewModel.busy(StateObjects.assessments) || viewModel.assessments.isEmpty
|
||||
viewModel.busy(StateObjects.assessments)
|
||||
? _buildPageLoadingIndicator(viewModel)
|
||||
: _buildAssessmentIntro();
|
||||
: _buildAssessmentIntro(viewModel);
|
||||
|
||||
Widget _buildPageLoadingIndicator(AssessmentViewModel viewModel) =>
|
||||
AssessmentLoadingScreen(
|
||||
|
|
@ -64,7 +64,10 @@ class AssessmentView extends StackedView<AssessmentViewModel> {
|
|||
onPop: viewModel.assessments.isEmpty ? viewModel.pop : null,
|
||||
);
|
||||
|
||||
Widget _buildAssessmentIntro() => const AssessmentIntroScreen();
|
||||
Widget _buildAssessmentIntro(AssessmentViewModel viewModel) =>
|
||||
AssessmentIntroScreen(
|
||||
hasAssessments: viewModel.assessments.isNotEmpty,
|
||||
);
|
||||
|
||||
Widget _buildAssessment() => const AssessmentQuestionsScreen();
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ import 'package:yimaru_app/ui/widgets/large_app_bar.dart';
|
|||
import '../assessment_viewmodel.dart';
|
||||
|
||||
class AssessmentIntroScreen extends ViewModelWidget<AssessmentViewModel> {
|
||||
const AssessmentIntroScreen({super.key});
|
||||
final bool hasAssessments;
|
||||
|
||||
const AssessmentIntroScreen({super.key, required this.hasAssessments});
|
||||
|
||||
Future<void> _next(AssessmentViewModel viewModel) async =>
|
||||
viewModel.setFirstAssessment();
|
||||
|
|
@ -29,11 +31,8 @@ class AssessmentIntroScreen extends ViewModelWidget<AssessmentViewModel> {
|
|||
children: _buildScaffoldChildren(viewModel),
|
||||
);
|
||||
|
||||
List<Widget> _buildScaffoldChildren(AssessmentViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
List<Widget> _buildScaffoldChildren(AssessmentViewModel viewModel) =>
|
||||
[_buildAppBar(viewModel), _buildExpandedBody(viewModel)];
|
||||
|
||||
Widget _buildExpandedBody(AssessmentViewModel viewModel) =>
|
||||
Expanded(child: _buildBodyWrapper(viewModel));
|
||||
|
|
@ -59,7 +58,7 @@ class AssessmentIntroScreen extends ViewModelWidget<AssessmentViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(AssessmentViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
@ -91,7 +90,7 @@ class AssessmentIntroScreen extends ViewModelWidget<AssessmentViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildLowerColumnChildren(AssessmentViewModel viewModel) => [
|
||||
_buildContinueButton(viewModel),
|
||||
if (hasAssessments) _buildContinueButton(viewModel),
|
||||
verticalSpaceSmall,
|
||||
_buildSkipButtonWrapper(viewModel)
|
||||
];
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ class AssessmentResultScreen extends ViewModelWidget<AssessmentViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(AssessmentViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ class StartLessonScreen extends ViewModelWidget<AssessmentViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(AssessmentViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -88,7 +88,6 @@ class RequestCodeScreen extends ViewModelWidget<ForgetPasswordViewModel> {
|
|||
required ForgetPasswordViewModel viewModel}) =>
|
||||
[
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(context: context, viewModel: viewModel)
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -88,7 +88,6 @@ class ResetPasswordScreen extends ViewModelWidget<ForgetPasswordViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(ForgetPasswordViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -24,17 +24,28 @@ class LearnCourseView extends StackedView<LearnCourseViewModel> {
|
|||
await viewModel.navigateToLearnPractice(
|
||||
id: course.id ?? 0, level: course.name ?? '');
|
||||
} else {
|
||||
await _showSheet(context: context, viewModel: viewModel);
|
||||
if (course.access?.isAccessible ?? false) {
|
||||
await _showSheet(
|
||||
context: context,
|
||||
viewModel: viewModel,
|
||||
practice: PracticeReason.course);
|
||||
} else {
|
||||
await _showSheet(
|
||||
context: context,
|
||||
viewModel: viewModel,
|
||||
practice: PracticeReason.previousCourse);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _showSheet(
|
||||
{required BuildContext context,
|
||||
required PracticeReason practice,
|
||||
required LearnCourseViewModel viewModel}) async =>
|
||||
await showModalBottomSheet(
|
||||
context: context,
|
||||
backgroundColor: kcTransparent,
|
||||
builder: (_) => _buildSheet(viewModel),
|
||||
builder: (_) => _buildSheet(viewModel: viewModel, practice: practice),
|
||||
);
|
||||
|
||||
@override
|
||||
|
|
@ -156,6 +167,11 @@ class LearnCourseView extends StackedView<LearnCourseViewModel> {
|
|||
onPracticeTap: onPracticeTap,
|
||||
);
|
||||
|
||||
Widget _buildSheet(LearnCourseViewModel viewModel) =>
|
||||
FinishPracticeSheet(onTap: viewModel.pop);
|
||||
Widget _buildSheet(
|
||||
{required PracticeReason practice,
|
||||
required LearnCourseViewModel viewModel}) =>
|
||||
FinishPracticeSheet(
|
||||
practice: practice,
|
||||
onTap: viewModel.pop,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,15 +31,23 @@ class LearnLessonView extends StackedView<LearnLessonViewModel> {
|
|||
} else {
|
||||
await _showSheet(context: context, viewModel: viewModel);
|
||||
}
|
||||
|
||||
/* if (index > 1) {
|
||||
/*
|
||||
if (index > 1) {
|
||||
if (viewModel.user?.subscriptionStatus?.toLowerCase() == 'subscribed') {
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
if (lesson.access?.isAccessible ?? false) {
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
} else {
|
||||
await _showSheet(context: context, viewModel: viewModel);
|
||||
}
|
||||
} else {
|
||||
await viewModel.navigateToLearnSubscription();
|
||||
}
|
||||
} else {
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
if (lesson.access?.isAccessible ?? false) {
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
} else {
|
||||
await _showSheet(context: context, viewModel: viewModel);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
|
|
@ -162,7 +170,7 @@ class LearnLessonView extends StackedView<LearnLessonViewModel> {
|
|||
verticalSpaceLarge,
|
||||
_buildHeader(),
|
||||
verticalSpaceMedium,
|
||||
_buildListViewBuilder(context: context,viewModel: viewModel),
|
||||
_buildListViewBuilder(context: context, viewModel: viewModel),
|
||||
];
|
||||
|
||||
Widget _buildTitle() => Text(
|
||||
|
|
@ -197,24 +205,28 @@ class LearnLessonView extends StackedView<LearnLessonViewModel> {
|
|||
style: style18DG700,
|
||||
);
|
||||
|
||||
Widget _buildListViewBuilder( {required BuildContext context,
|
||||
required LearnLessonViewModel viewModel}) =>
|
||||
Widget _buildListViewBuilder(
|
||||
{required BuildContext context,
|
||||
required LearnLessonViewModel viewModel}) =>
|
||||
viewModel.busy(StateObjects.learnLessons)
|
||||
? _buildProgressIndicator()
|
||||
: _buildListView(context: context,viewModel: viewModel);
|
||||
: _buildListView(context: context, viewModel: viewModel);
|
||||
|
||||
Widget _buildProgressIndicator() => const Center(
|
||||
child: CustomCircularProgressIndicator(color: kcPrimaryColor),
|
||||
);
|
||||
|
||||
Widget _buildListView( {required BuildContext context,
|
||||
required LearnLessonViewModel viewModel}) => ListView.builder(
|
||||
Widget _buildListView(
|
||||
{required BuildContext context,
|
||||
required LearnLessonViewModel viewModel}) =>
|
||||
ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: viewModel.lessons.length,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) => _buildTile(
|
||||
index: index,
|
||||
lesson: viewModel.lessons[index],
|
||||
last: index == viewModel.lessons.length - 1 ,
|
||||
onPracticeTap: () async => await _onPractice(
|
||||
index: index,
|
||||
context: context,
|
||||
|
|
@ -231,18 +243,23 @@ required LearnLessonViewModel viewModel}) => ListView.builder(
|
|||
);
|
||||
|
||||
Widget _buildTile({
|
||||
required bool last,
|
||||
required int index,
|
||||
required LearnLesson lesson,
|
||||
required GestureTapCallback? onLessonTap,
|
||||
required GestureTapCallback? onPracticeTap,
|
||||
}) =>
|
||||
LearnLessonTile(
|
||||
last: last,
|
||||
index: index,
|
||||
|
||||
lesson: lesson,
|
||||
onLessonTap: onLessonTap,
|
||||
onPracticeTap: onPracticeTap,
|
||||
);
|
||||
|
||||
Widget _buildSheet(LearnLessonViewModel viewModel) =>
|
||||
FinishPracticeSheet(onTap: viewModel.pop);
|
||||
Widget _buildSheet(LearnLessonViewModel viewModel) => FinishPracticeSheet(
|
||||
onTap: viewModel.pop,
|
||||
practice: PracticeReason.lesson,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,13 +33,18 @@ class LearnLessonDetailView extends StackedView<LearnLessonDetailViewModel> {
|
|||
required LearnLessonDetailViewModel viewModel}) async {
|
||||
await viewModel.pause();
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
/*if (index > 1) {
|
||||
|
||||
|
||||
/* if (index > 1) {
|
||||
if (viewModel.user?.subscriptionStatus?.toLowerCase() == 'subscribed') {
|
||||
await viewModel.pause();
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
} else {
|
||||
await viewModel.pause();
|
||||
await viewModel.navigateToLearnSubscription();
|
||||
}
|
||||
} else {
|
||||
await viewModel.pause();
|
||||
await viewModel.navigateToLearnPractice(lesson.id ?? 0);
|
||||
}*/
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,27 +17,42 @@ import 'learn_module_viewmodel.dart';
|
|||
|
||||
class LearnModuleView extends StackedView<LearnModuleViewModel> {
|
||||
final LearnCourse course;
|
||||
|
||||
const LearnModuleView({Key? key, required this.course}) : super(key: key);
|
||||
|
||||
Future<void> _onPractice(
|
||||
{required BuildContext context,
|
||||
required LearnModule module,
|
||||
required LearnModuleViewModel viewModel}) async {
|
||||
if (module.access?.completedCount == module.access?.totalCount) {
|
||||
if (module.access?.completedCount == module.access?.totalCount ) {
|
||||
await viewModel.navigateToLearnPractice(
|
||||
id: module.id ?? 0, module: module.name ?? '');
|
||||
} else {
|
||||
await _showSheet(context: context, viewModel: viewModel);
|
||||
if (module.access?.isAccessible ?? false) {
|
||||
print('Accessible');
|
||||
await _showSheet(
|
||||
context: context,
|
||||
viewModel: viewModel,
|
||||
practice: PracticeReason.module);
|
||||
} else {
|
||||
print('Inaccessible');
|
||||
|
||||
await _showSheet(
|
||||
context: context,
|
||||
viewModel: viewModel,
|
||||
practice: PracticeReason.previousModule);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _showSheet(
|
||||
{required BuildContext context,
|
||||
required PracticeReason practice,
|
||||
required LearnModuleViewModel viewModel}) async =>
|
||||
await showModalBottomSheet(
|
||||
context: context,
|
||||
backgroundColor: kcTransparent,
|
||||
builder: (_) => _buildSheet(viewModel),
|
||||
builder: (_) => _buildSheet(viewModel: viewModel, practice: practice),
|
||||
);
|
||||
|
||||
@override
|
||||
|
|
@ -201,6 +216,11 @@ class LearnModuleView extends StackedView<LearnModuleViewModel> {
|
|||
onModuleTap: onModuleTap,
|
||||
onPracticeTap: onPracticeTap);
|
||||
|
||||
Widget _buildSheet(LearnModuleViewModel viewModel) =>
|
||||
FinishPracticeSheet(onTap: viewModel.pop);
|
||||
Widget _buildSheet(
|
||||
{required PracticeReason practice,
|
||||
required LearnModuleViewModel viewModel}) =>
|
||||
FinishPracticeSheet(
|
||||
practice: practice,
|
||||
onTap: viewModel.pop,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ import 'package:yimaru_app/ui/views/onboarding/screens/country_region_form_scree
|
|||
import 'package:yimaru_app/ui/views/onboarding/screens/educational_background_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/full_name_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/gender_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/language_goal_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/learning_goal_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/language_goal_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/occupation_form_screen.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/screens/topic_form_screen.dart';
|
||||
|
||||
|
|
@ -129,9 +129,9 @@ class OnboardingView extends StackedView<OnboardingViewModel>
|
|||
Widget _buildCountryRegionForm() =>
|
||||
CountryRegionFormScreen(regionController: regionController);
|
||||
|
||||
Widget _buildLearningGoalForm() => const LearningGoalFormScreen();
|
||||
Widget _buildLearningGoalForm() => const LanguageGoalFormScreens();
|
||||
|
||||
Widget _buildLanguageGoalForm() => const LanguageGoalFormScreen();
|
||||
Widget _buildLanguageGoalForm() => const LearningGoalFormScreen();
|
||||
|
||||
Widget _buildChallengeForm() => const ChallengeFormScreen();
|
||||
|
||||
|
|
|
|||
|
|
@ -243,8 +243,7 @@ class OnboardingViewModel extends ReactiveViewModel
|
|||
bool isSelectedLearningGoal(FieldOption value) =>
|
||||
_selectedLearningGoal == value;
|
||||
|
||||
// Learning reason
|
||||
|
||||
// Language goal
|
||||
void setSelectedLanguageGoal(FieldOption value) {
|
||||
_selectedLanguageGoal = value;
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ class AgeGroupFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -76,7 +75,7 @@ class AgeGroupFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ class ChallengeFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -77,7 +76,7 @@ class ChallengeFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ class CountryRegionFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -93,7 +92,7 @@ class CountryRegionFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ class EducationalBackgroundFormScreen
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -78,7 +77,7 @@ class EducationalBackgroundFormScreen
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ class FullNameFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -75,7 +74,7 @@ class FullNameFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ class GenderFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -70,7 +69,7 @@ class GenderFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -1,16 +1,43 @@
|
|||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:iconsax/iconsax.dart';
|
||||
import 'package:stacked/stacked.dart';
|
||||
import 'package:yimaru_app/ui/common/app_colors.dart';
|
||||
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
|
||||
import 'package:yimaru_app/ui/common/ui_helpers.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_elevated_button.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/onboarding_viewmodel.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_small_radio_button.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_large_radio_button.dart';
|
||||
import 'package:yimaru_app/ui/widgets/large_app_bar.dart';
|
||||
|
||||
class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
||||
const LanguageGoalFormScreen({super.key});
|
||||
class LanguageGoalFormScreens extends ViewModelWidget<OnboardingViewModel> {
|
||||
const LanguageGoalFormScreens({super.key});
|
||||
|
||||
IconData getIcon(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return Iconsax.book;
|
||||
case 1:
|
||||
return Iconsax.microphone;
|
||||
case 2:
|
||||
return Iconsax.bag;
|
||||
}
|
||||
return Icons.book;
|
||||
}
|
||||
|
||||
|
||||
|
||||
String getSubtitle(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return 'I know some English, but i want to learn to speak it';
|
||||
case 1:
|
||||
return 'I already speak English, but I want more practice.';
|
||||
case 2:
|
||||
return 'I want courses for IELTS, TOEFL, Duolingo, or work';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
void _pop(OnboardingViewModel viewModel) {
|
||||
viewModel.resetLanguageGoalFormScreen();
|
||||
|
|
@ -22,6 +49,7 @@ class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
Map<String, dynamic> data = {
|
||||
'language_goal': viewModel.selectedLanguageGoal?.code,
|
||||
|
||||
};
|
||||
viewModel.addUserData(data);
|
||||
|
||||
|
|
@ -44,7 +72,6 @@ class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -77,13 +104,10 @@ class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
verticalSpaceMedium,
|
||||
_buildReasons(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildLanguageGoals(viewModel)
|
||||
];
|
||||
|
||||
Widget _buildAppBar(OnboardingViewModel viewModel) => LargeAppBar(
|
||||
|
|
@ -96,23 +120,27 @@ class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
: viewModel.selectedLanguage['code'],
|
||||
);
|
||||
|
||||
Widget _buildTitle() => Text(
|
||||
LocaleKeys.language_goal.tr(),
|
||||
style: style25DG600,
|
||||
Widget _buildTitle(OnboardingViewModel viewModel) => Text.rich(
|
||||
TextSpan(
|
||||
text:
|
||||
'${LocaleKeys.hello.tr()} ${viewModel.userData['first_name']},',
|
||||
style: style18P600.copyWith(fontSize: 22),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: ' ${LocaleKeys.language_goal.tr()}',
|
||||
style: style16DG600.copyWith(fontSize: 22),
|
||||
)
|
||||
]),
|
||||
);
|
||||
|
||||
Widget _buildSubtitle() => Text(
|
||||
LocaleKeys.your_goal.tr(),
|
||||
style: style14MG400,
|
||||
);
|
||||
|
||||
Widget _buildReasons(OnboardingViewModel viewModel) => ListView.builder(
|
||||
Widget _buildLanguageGoals(OnboardingViewModel viewModel) => ListView.builder(
|
||||
shrinkWrap: true,
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: viewModel.languageGoals.length,
|
||||
itemCount: viewModel.languageGoals.length,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) => _buildLanguageGoal(
|
||||
title: viewModel.languageGoals[index].label ?? '',
|
||||
icon: getIcon(index),
|
||||
subtitle: getSubtitle(index),
|
||||
title:viewModel.languageGoals[index].label ?? '',
|
||||
selected:
|
||||
viewModel.isSelectedLanguageGoal(viewModel.languageGoals[index]),
|
||||
onTap: () =>
|
||||
|
|
@ -123,10 +151,14 @@ class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
Widget _buildLanguageGoal(
|
||||
{required String title,
|
||||
required bool selected,
|
||||
required IconData icon,
|
||||
required String subtitle,
|
||||
required GestureTapCallback onTap}) =>
|
||||
CustomSmallRadioButton(
|
||||
CustomLargeRadioButton(
|
||||
icon: icon,
|
||||
title: title,
|
||||
onTap: onTap,
|
||||
subtitle: subtitle,
|
||||
selected: selected,
|
||||
);
|
||||
|
||||
|
|
@ -137,14 +169,15 @@ class LanguageGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
Widget _buildContinueButton(OnboardingViewModel viewModel) =>
|
||||
CustomElevatedButton(
|
||||
height: 55,
|
||||
borderRadius: 12,
|
||||
foregroundColor: kcWhite,
|
||||
text: LocaleKeys.cont.tr(),
|
||||
onTap: viewModel.selectedLanguageGoal != null
|
||||
? () => _next(viewModel)
|
||||
: null,
|
||||
backgroundColor: viewModel.selectedLanguageGoal != null
|
||||
? kcPrimaryColor
|
||||
: kcPrimaryColor.withOpacity(0.1));
|
||||
height: 55,
|
||||
borderRadius: 12,
|
||||
foregroundColor: kcWhite,
|
||||
text: LocaleKeys.cont.tr(),
|
||||
onTap: viewModel.selectedLanguageGoal != null
|
||||
? () => _next(viewModel)
|
||||
: null,
|
||||
backgroundColor: viewModel.selectedLanguageGoal != null
|
||||
? kcPrimaryColor
|
||||
: kcPrimaryColor.withOpacity(0.1),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,54 +1,17 @@
|
|||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:iconsax/iconsax.dart';
|
||||
import 'package:stacked/stacked.dart';
|
||||
import 'package:yimaru_app/ui/common/app_colors.dart';
|
||||
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
|
||||
import 'package:yimaru_app/ui/common/ui_helpers.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_elevated_button.dart';
|
||||
import 'package:yimaru_app/ui/views/onboarding/onboarding_viewmodel.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_large_radio_button.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_small_radio_button.dart';
|
||||
import 'package:yimaru_app/ui/widgets/large_app_bar.dart';
|
||||
|
||||
class LearningGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
||||
const LearningGoalFormScreen({super.key});
|
||||
|
||||
IconData getIcon(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return Iconsax.book;
|
||||
case 1:
|
||||
return Iconsax.microphone;
|
||||
case 2:
|
||||
return Iconsax.bag;
|
||||
}
|
||||
return Icons.book;
|
||||
}
|
||||
|
||||
String getTitles(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return 'Learn to Speak English';
|
||||
case 1:
|
||||
return 'Practice Speaking English';
|
||||
case 2:
|
||||
return 'Skill-based Courses';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
String getSubtitle(int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
return 'I know some English, but i want to learn to speak it';
|
||||
case 1:
|
||||
return 'I already speak English, but I want more practice.';
|
||||
case 2:
|
||||
return 'I want courses for IELTS, TOEFL, Duolingo, or work';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
void _pop(OnboardingViewModel viewModel) {
|
||||
viewModel.resetLearningGoalFormScreen();
|
||||
viewModel.goBack();
|
||||
|
|
@ -81,7 +44,6 @@ class LearningGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -114,10 +76,13 @@ class LearningGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
verticalSpaceMedium,
|
||||
_buildTitle(viewModel),
|
||||
_buildGoals(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildLearningGoals(viewModel)
|
||||
];
|
||||
|
||||
Widget _buildAppBar(OnboardingViewModel viewModel) => LargeAppBar(
|
||||
|
|
@ -130,27 +95,23 @@ class LearningGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
: viewModel.selectedLanguage['code'],
|
||||
);
|
||||
|
||||
Widget _buildTitle(OnboardingViewModel viewModel) => Text.rich(
|
||||
TextSpan(
|
||||
text:
|
||||
'${LocaleKeys.hello.tr()} ${viewModel.userData['first_name']},',
|
||||
style: style18P600.copyWith(fontSize: 22),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: ' ${LocaleKeys.learning_goal.tr()}',
|
||||
style: style16DG600.copyWith(fontSize: 22),
|
||||
)
|
||||
]),
|
||||
Widget _buildTitle() => Text(
|
||||
LocaleKeys.learning_goal.tr(),
|
||||
style: style25DG600,
|
||||
);
|
||||
|
||||
Widget _buildLearningGoals(OnboardingViewModel viewModel) => ListView.builder(
|
||||
Widget _buildSubtitle() => Text(
|
||||
LocaleKeys.your_goal.tr(),
|
||||
style: style14MG400,
|
||||
);
|
||||
|
||||
Widget _buildGoals(OnboardingViewModel viewModel) => ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: 3, // viewModel.learningGoals.length,
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: viewModel.learningGoals.length,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) => _buildLearningGoal(
|
||||
icon: getIcon(index),
|
||||
title: getTitles(index),
|
||||
subtitle: getSubtitle(index),
|
||||
title: viewModel.learningGoals[index].label ?? '',
|
||||
selected:
|
||||
viewModel.isSelectedLearningGoal(viewModel.learningGoals[index]),
|
||||
onTap: () =>
|
||||
|
|
@ -161,14 +122,10 @@ class LearningGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
Widget _buildLearningGoal(
|
||||
{required String title,
|
||||
required bool selected,
|
||||
required IconData icon,
|
||||
required String subtitle,
|
||||
required GestureTapCallback onTap}) =>
|
||||
CustomLargeRadioButton(
|
||||
icon: icon,
|
||||
CustomSmallRadioButton(
|
||||
title: title,
|
||||
onTap: onTap,
|
||||
subtitle: subtitle,
|
||||
selected: selected,
|
||||
);
|
||||
|
||||
|
|
@ -179,15 +136,14 @@ class LearningGoalFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
Widget _buildContinueButton(OnboardingViewModel viewModel) =>
|
||||
CustomElevatedButton(
|
||||
height: 55,
|
||||
borderRadius: 12,
|
||||
foregroundColor: kcWhite,
|
||||
text: LocaleKeys.cont.tr(),
|
||||
onTap: viewModel.selectedLearningGoal != null
|
||||
? () => _next(viewModel)
|
||||
: null,
|
||||
backgroundColor: viewModel.selectedLearningGoal != null
|
||||
? kcPrimaryColor
|
||||
: kcPrimaryColor.withOpacity(0.1),
|
||||
);
|
||||
height: 55,
|
||||
borderRadius: 12,
|
||||
foregroundColor: kcWhite,
|
||||
text: LocaleKeys.cont.tr(),
|
||||
onTap: viewModel.selectedLearningGoal != null
|
||||
? () => _next(viewModel)
|
||||
: null,
|
||||
backgroundColor: viewModel.selectedLearningGoal != null
|
||||
? kcPrimaryColor
|
||||
: kcPrimaryColor.withOpacity(0.1));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ class OccupationFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -78,7 +77,7 @@ class OccupationFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ class TopicFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
|
||||
List<Widget> _buildScaffoldChildren(OnboardingViewModel viewModel) => [
|
||||
_buildAppBar(viewModel),
|
||||
verticalSpaceMedium,
|
||||
_buildExpandedBody(viewModel)
|
||||
];
|
||||
|
||||
|
|
@ -90,7 +89,7 @@ class TopicFormScreen extends ViewModelWidget<OnboardingViewModel> {
|
|||
);
|
||||
|
||||
List<Widget> _buildUpperColumnChildren(OnboardingViewModel viewModel) => [
|
||||
verticalSpaceMedium,
|
||||
verticalSpaceLarge,
|
||||
_buildTitle(),
|
||||
verticalSpaceSmall,
|
||||
_buildSubtitle(),
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:stacked/stacked.dart';
|
||||
import 'package:yimaru_app/models/course_lesson.dart';
|
||||
import 'package:yimaru_app/models/course_module.dart';
|
||||
import 'package:yimaru_app/ui/common/enmus.dart';
|
||||
import 'package:yimaru_app/ui/views/course_module/course_module_viewmodel.dart';
|
||||
import 'package:yimaru_app/ui/widgets/course_lesson_tile.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_linear_progress_indicator.dart';
|
||||
|
|
@ -182,6 +183,7 @@ class CourseModuleTileLarge extends ViewModelWidget<CourseModuleViewModel> {
|
|||
|
||||
Widget _buildSheet(CourseModuleViewModel viewModel) => FinishPracticeSheet(
|
||||
onTap: viewModel.pop,
|
||||
practice: PracticeReason.lesson,
|
||||
);
|
||||
|
||||
Widget _buildCourseModules(CourseModuleViewModel viewModel) =>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import 'package:yimaru_app/ui/widgets/finish_practice_sheet.dart';
|
|||
|
||||
import '../../models/course_catalog.dart';
|
||||
import '../common/app_colors.dart';
|
||||
import '../common/enmus.dart';
|
||||
import '../common/ui_helpers.dart';
|
||||
import '../views/course_unit/course_unit_viewmodel.dart';
|
||||
import 'custom_circular_progress_indicator.dart';
|
||||
|
|
@ -228,6 +229,7 @@ class CourseUnitTile extends ViewModelWidget<CourseUnitViewModel> {
|
|||
|
||||
Widget _buildSheet(CourseUnitViewModel viewModel) => FinishPracticeSheet(
|
||||
onTap: viewModel.pop,
|
||||
practice: PracticeReason.course,
|
||||
);
|
||||
|
||||
Widget _buildCourseModulesState(CourseUnitViewModel viewModel) =>
|
||||
|
|
@ -240,6 +242,7 @@ class CourseUnitTile extends ViewModelWidget<CourseUnitViewModel> {
|
|||
width: double.maxFinite,
|
||||
child: _buildProgressIndicator(),
|
||||
);
|
||||
|
||||
Widget _buildProgressIndicator() => const Center(
|
||||
child: CustomCircularProgressIndicator(color: kcPrimaryColor),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:yimaru_app/ui/common/app_colors.dart';
|
||||
import 'package:yimaru_app/ui/common/enmus.dart';
|
||||
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
|
||||
import 'package:yimaru_app/ui/common/ui_helpers.dart';
|
||||
import 'package:yimaru_app/ui/widgets/custom_bottom_sheet.dart';
|
||||
|
|
@ -9,9 +10,24 @@ import 'package:yimaru_app/ui/widgets/custom_bottom_sheet.dart';
|
|||
import 'custom_elevated_button.dart';
|
||||
|
||||
class FinishPracticeSheet extends StatelessWidget {
|
||||
final PracticeReason practice;
|
||||
final GestureTapCallback? onTap;
|
||||
|
||||
const FinishPracticeSheet({super.key, this.onTap});
|
||||
const FinishPracticeSheet({super.key, this.onTap, required this.practice});
|
||||
|
||||
String getWarning() {
|
||||
if (practice == PracticeReason.lesson) {
|
||||
return LocaleKeys.finish_all_practice_lesson.tr();
|
||||
} else if (practice == PracticeReason.module) {
|
||||
return LocaleKeys.finish_all_practice_module.tr();
|
||||
} else if (practice == PracticeReason.previousModule) {
|
||||
return LocaleKeys.finish_all_practice_previouse_module.tr();
|
||||
} else if (practice == PracticeReason.previousCourse) {
|
||||
return LocaleKeys.finish_all_practice_previouse_course.tr();
|
||||
} else {
|
||||
return LocaleKeys.finish_all_practice_course.tr();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => _buildSheetWrapper();
|
||||
|
|
@ -44,7 +60,7 @@ class FinishPracticeSheet extends StatelessWidget {
|
|||
);
|
||||
|
||||
Widget _buildMessage() => Text(
|
||||
LocaleKeys.finish_all_practice.tr(),
|
||||
getWarning(),
|
||||
style: style16DG600,
|
||||
textAlign: TextAlign.center,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,13 @@ class LearnCourseTile extends ViewModelWidget<LearnCourseViewModel> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, LearnCourseViewModel viewModel) =>
|
||||
_buildExpansionTileCard(viewModel);
|
||||
_buildExpansionTileCardWrapper(viewModel);
|
||||
|
||||
|
||||
Widget _buildExpansionTileCardWrapper(LearnCourseViewModel viewModel)=> GestureDetector(
|
||||
onTap: !(course.access?.isAccessible ?? false) ? onPracticeTap:null,
|
||||
child: _buildExpansionTileCard(viewModel),
|
||||
);
|
||||
|
||||
Widget _buildExpansionTileCard(LearnCourseViewModel viewModel) => Container(
|
||||
margin: const EdgeInsets.only(bottom: 15),
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import 'custom_linear_progress_indicator.dart';
|
|||
|
||||
class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
|
||||
final int index;
|
||||
final bool last;
|
||||
final LearnLesson lesson;
|
||||
final GestureTapCallback? onLessonTap;
|
||||
final GestureTapCallback? onPracticeTap;
|
||||
|
|
@ -24,6 +25,7 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
|
|||
{super.key,
|
||||
this.onLessonTap,
|
||||
this.onPracticeTap,
|
||||
required this.last,
|
||||
required this.index,
|
||||
required this.lesson});
|
||||
|
||||
|
|
@ -31,10 +33,12 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
|
|||
Widget build(BuildContext context, LearnLessonViewModel viewModel) =>
|
||||
_buildContainerWrapper(viewModel);
|
||||
|
||||
Widget _buildContainerWrapper(LearnLessonViewModel viewModel)=> GestureDetector(
|
||||
onTap: !(lesson.access?.isAccessible ?? false) ? onPracticeTap:null,
|
||||
child: _buildContainer(viewModel),
|
||||
);
|
||||
Widget _buildContainerWrapper(LearnLessonViewModel viewModel) =>
|
||||
GestureDetector(
|
||||
onTap: !(lesson.access?.isAccessible ?? false) ? onPracticeTap : null,
|
||||
child: _buildContainer(viewModel),
|
||||
);
|
||||
|
||||
Widget _buildContainer(LearnLessonViewModel viewModel) => Container(
|
||||
width: double.maxFinite,
|
||||
margin: const EdgeInsets.only(bottom: 15),
|
||||
|
|
@ -70,12 +74,14 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
|
|||
controlAffinity: ListTileControlAffinity.trailing,
|
||||
expandedCrossAxisAlignment: CrossAxisAlignment.start,
|
||||
tilePadding: const EdgeInsets.fromLTRB(15, 15, 15, 15),
|
||||
backgroundColor: (lesson.access?.isCompleted ?? false)
|
||||
? kcGreen.withOpacity(0.1)
|
||||
: kcPrimaryColor.withOpacity(0.1),
|
||||
childrenPadding: const EdgeInsets.fromLTRB(15, 0, 15, 15),
|
||||
initiallyExpanded: (lesson.access?.isAccessible ?? false) &&
|
||||
!(lesson.access?.isCompleted ?? false),
|
||||
backgroundColor: last && (lesson.access?.isAccessible ?? false)
|
||||
? kcGreen.withOpacity(0.1)
|
||||
: (lesson.access?.isCompleted ?? false)
|
||||
? kcGreen.withOpacity(0.1)
|
||||
: kcPrimaryColor.withOpacity(0.1),
|
||||
collapsedBackgroundColor: (lesson.access?.isCompleted ?? false)
|
||||
? kcGreen.withOpacity(0.1)
|
||||
: kcPrimaryColor.withOpacity(0.1),
|
||||
|
|
@ -92,9 +98,11 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
|
|||
style: style16DG600,
|
||||
);
|
||||
|
||||
Widget _buildIconState() => (lesson.access?.isCompleted ?? false)
|
||||
Widget _buildIconState() => last && (lesson.access?.isAccessible ?? false)
|
||||
? _buildCompleteIcon()
|
||||
: _buildPendingIcon();
|
||||
: (lesson.access?.isCompleted ?? false)
|
||||
? _buildCompleteIcon()
|
||||
: _buildPendingIcon();
|
||||
|
||||
Widget _buildCompleteIcon() => const Icon(
|
||||
Icons.check,
|
||||
|
|
@ -128,13 +136,17 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
|
|||
Widget _buildProgress() => CustomLinearProgressIndicator(
|
||||
activeColor: kcPrimaryColor,
|
||||
backgroundColor: kcVeryLightGrey,
|
||||
progress: (lesson.access?.progressPercent ?? 0) / 100,
|
||||
progress: last && (lesson.access?.isAccessible ?? false)
|
||||
? 1
|
||||
: (lesson.access?.progressPercent ?? 0) / 100,
|
||||
);
|
||||
|
||||
Widget _buildProgressText() => Text(
|
||||
(lesson.access?.isCompleted ?? false)
|
||||
last && (lesson.access?.isAccessible ?? false)
|
||||
? LocaleKeys.completed.tr()
|
||||
: LocaleKeys.in_progress.tr(),
|
||||
: (lesson.access?.isCompleted ?? false)
|
||||
? LocaleKeys.completed.tr()
|
||||
: LocaleKeys.in_progress.tr(),
|
||||
style: style14P600,
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -23,8 +23,13 @@ class LearnModuleTile extends ViewModelWidget<LearnModuleViewModel> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, LearnModuleViewModel viewModel) =>
|
||||
_buildExpansionTileCard(context: context, viewModel: viewModel);
|
||||
_buildExpansionTileCardWrapper(context: context, viewModel: viewModel);
|
||||
|
||||
Widget _buildExpansionTileCardWrapper( {required BuildContext context,
|
||||
required LearnModuleViewModel viewModel})=> GestureDetector(
|
||||
onTap: !(module.access?.isAccessible ?? false) ? onPracticeTap:null,
|
||||
child: _buildExpansionTileCard(context: context,viewModel: viewModel),
|
||||
);
|
||||
Widget _buildExpansionTileCard(
|
||||
{required BuildContext context,
|
||||
required LearnModuleViewModel viewModel}) =>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
name: yimaru_app
|
||||
version: 0.1.28+30
|
||||
version: 0.1.29+31
|
||||
publish_to: 'none'
|
||||
description: A new Flutter project.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user