Compare commits

..

No commits in common. "03c9a52e0598eba079257dbe87cc0c9db914a260" and "2ac39558c73d09af35d787593ee568bad8ad8cca" have entirely different histories.

39 changed files with 107 additions and 350 deletions

View File

@ -119,53 +119,7 @@
"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_practice": "በዚህ ደረጃ የተማርከውን በፍጥነት እንከልስ!",
"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": "ምን ብለን እንጠራህ?",
"use_for_personalization": "በመማር ጉዞህ ውስጥ ለግል ለማድረግ ስምህን እንጠቀማለን።"
"tap_to_call": "ለመደወል ይንኩ"
}

View File

@ -73,7 +73,7 @@
"reply": "Reply",
"cancel": "Cancel",
"you_are_speaking": "You're speaking",
"practice_completed": "Practice completed!",
"practice_completed": "Practice completed",
"great_improvement": "You sound more confident this time, great improvement",
"practice_again": "Practice again",
"conversation_review": "Conversation review",
@ -119,38 +119,6 @@
"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": "Lets Practice",
"lets_quickly_review": "Lets quickly review what youve learned in this module!",
"lets_practice_module": "Let's practice what you just learnt!",
"ask_you_few_actions": "Ill ask you a few questions, and you can respond naturally.",
"begin_level_practice": "Begin Level Practice",
"lets_practice_course": "Lets Practice Course",
"lets_quick_review": "Lets quickly review what youve 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, youve 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?",
"use_for_personalization": "Well use your name to personalize your learning journey."
"tap_to_call": "Tap to call"
}

View File

@ -1,15 +1,9 @@
import 'package:battery_plus/battery_plus.dart';
import 'package:flutter/services.dart';
import 'package:in_app_update/in_app_update.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:storage_info/storage_info.dart';
import 'package:yimaru_app/app/app.locator.dart';
import '../ui/common/ui_helpers.dart';
class InAppUpdateService {
final _navigationService = locator<NavigationService>();
Future<int> getBatteryLevel() async {
final battery = Battery();
final batteryLevel = await battery.batteryLevel;
@ -49,11 +43,7 @@ class InAppUpdateService {
try {
final info = await InAppUpdate.checkForUpdate();
if (info.updateAvailability == UpdateAvailability.updateAvailable) {
AppUpdateResult result = await InAppUpdate.performImmediateUpdate();
if (result == AppUpdateResult.userDeniedUpdate) {
showErrorToast('An update is required to continue using this app.');
_navigationService.back();
}
await InAppUpdate.completeFlexibleUpdate();
}
// ... rest of your update logic ...

View File

@ -135,39 +135,7 @@ class CodegenLoader extends AssetLoader{
"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_practice": "በዚህ ደረጃ የተማርከውን በፍጥነት እንከልስ!",
"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": "ምን ብለን እንጠራህ?",
"use_for_personalization": "በመማር ጉዞህ ውስጥ ለግል ለማድረግ ስምህን እንጠቀማለን።"
"tap_to_call": "ለመደወል ይንኩ"
};
static const Map<String,dynamic> _en = {
"loading": "Loading",
@ -244,7 +212,7 @@ static const Map<String,dynamic> _en = {
"reply": "Reply",
"cancel": "Cancel",
"you_are_speaking": "You're speaking",
"practice_completed": "Practice completed!",
"practice_completed": "Practice completed",
"great_improvement": "You sound more confident this time, great improvement",
"practice_again": "Practice again",
"conversation_review": "Conversation review",
@ -290,39 +258,7 @@ static const Map<String,dynamic> _en = {
"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": "Lets Practice",
"lets_quickly_review": "Lets quickly review what youve learned in this module!",
"lets_practice_module": "Let's practice what you just learnt!",
"ask_you_few_actions": "Ill ask you a few questions, and you can respond naturally.",
"begin_level_practice": "Begin Level Practice",
"lets_practice_course": "Lets Practice Course",
"lets_quick_review": "Lets quickly review what youve 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, youve 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?",
"use_for_personalization": "Well use your name to personalize your learning journey."
"tap_to_call": "Tap to call"
};
static const Map<String, Map<String,dynamic>> mapLocales = {"am": _am, "en": _en};
}

View File

@ -122,37 +122,5 @@ abstract class LocaleKeys {
static const chat_via_telegram = 'chat_via_telegram';
static const call_our_support = 'call_our_support';
static const tap_to_call = 'tap_to_call';
static const join_telegram = 'join_telegram';
static const connect_with_support_team = 'connect_with_support_team';
static const open_in_telegram = 'open_in_telegram';
static const search_for = 'search_for';
static const current_level = 'current_level';
static const keep_up_the_great_work = 'keep_up_the_great_work';
static const no_practice_available = 'no_practice_available';
static const begin_module_practice = 'begin_module_practice';
static const lets_practice_lesson = 'lets_practice_lesson';
static const lets_quickly_review = 'lets_quickly_review';
static const lets_practice_module = 'lets_practice_module';
static const ask_you_few_actions = 'ask_you_few_actions';
static const begin_level_practice = 'begin_level_practice';
static const lets_practice_course = 'lets_practice_course';
static const lets_quick_practice = 'lets_quick_practice';
static const speaking = 'speaking';
static const you_have_finished_practice = 'you_have_finished_practice';
static const view_results = 'view_results';
static const sample_answer = 'sample_answer';
static const your_answer = 'your_answer';
static const sound_confident = 'sound_confident';
static const you_have_completed = 'you_have_completed';
static const yes = 'yes';
static const no = 'no';
static const want_to_quit = 'want_to_quit';
static const required_field = 'required_field';
static const enter_full_name = 'enter_full_name';
static const invalid_email = 'invalid_email';
static const phone_must_start_with = 'phone_must_start_with';
static const phone_must_be = 'phone_must_be';
static const what_should_we_call_you = 'what_should_we_call_you';
static const use_for_personalization = 'use_for_personalization';
}

View File

@ -1,6 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:email_validator/email_validator.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
class FormValidator {
// Form validator
@ -10,7 +8,7 @@ class FormValidator {
}
if (value.isEmpty) {
return LocaleKeys.required_field.tr();
return 'The field is required';
}
return null;
@ -23,12 +21,12 @@ class FormValidator {
}
if (value.isEmpty) {
return LocaleKeys.required_field.tr();
return 'The field is required';
}
final regex = RegExp(r'^\S+\s+\S+.*$');
if (!regex.hasMatch(value.trim())) {
return LocaleKeys.enter_full_name.tr();
return "Enter your full name";
}
return null;
}
@ -40,11 +38,11 @@ class FormValidator {
}
if (value.isEmpty) {
return LocaleKeys.required_field.tr();
return 'The field is required';
}
if (!EmailValidator.validate(value)) {
return LocaleKeys.invalid_email.tr();
return 'Invalid email format';
}
return null;
@ -57,7 +55,7 @@ class FormValidator {
}
if (value.isEmpty) {
return LocaleKeys.required_field.tr();
return 'The field is required';
}
return null;
}
@ -69,19 +67,19 @@ class FormValidator {
}
if (value.isEmpty) {
return LocaleKeys.required_field.tr();
return 'The field is required';
}
// Regex validation
final regex = RegExp(r'^251');
if (!regex.hasMatch(value)) {
return LocaleKeys.phone_must_start_with.tr();
return 'Phone number must start with 251';
}
// Length check first (optional but recommended)
if (value.length != 12) {
return LocaleKeys.phone_must_be.tr();
return 'Phone number must be 12 digits';
}
return null;
}

View File

@ -6,7 +6,6 @@ import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_program/learn_program_view.dart';
import 'package:yimaru_app/ui/views/profile/profile_view.dart';
import '../../widgets/coming_soon.dart';
import '../course/course_view.dart';
import 'home_viewmodel.dart';
@ -72,7 +71,7 @@ class HomeView extends StackedView<HomeViewModel> {
case 0:
return const LearnProgramView();
case 1:
return const ComingSoon();
return const CourseView();
default:
return const ProfileView();

View File

@ -1,4 +1,3 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:yimaru_app/app/app.router.dart';
@ -8,7 +7,6 @@ import '../../../models/learn_course.dart';
import '../../../services/learn_service.dart';
import '../../../services/status_checker_service.dart';
import '../../common/enmus.dart';
import '../../common/translations/locale_keys.g.dart';
class LearnCourseViewModel extends ReactiveViewModel {
// Dependency injection
@ -37,10 +35,10 @@ class LearnCourseViewModel extends ReactiveViewModel {
await _navigationService.navigateToLearnPracticeView(
id: id,
level: level,
label: 'Begin Level Practice',
practice: LearnPractices.course,
label: LocaleKeys.begin_level_practice.tr(),
subtitle: LocaleKeys.lets_quick_practice.tr(),
title: '${LocaleKeys.lets_practice_course.tr()} $level',
title: 'Lets Practice Course $level',
subtitle: 'Lets quickly review what youve learned in this level!',
);
// Remote api call

View File

@ -1,10 +1,8 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/models/learn_lesson.dart';
import 'package:yimaru_app/models/learn_module.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/widgets/learn_lesson_tile.dart';
import 'package:yimaru_app/ui/widgets/module_progress.dart';
import 'package:yimaru_app/ui/widgets/motivation_card.dart';
@ -152,7 +150,7 @@ class LearnLessonView extends StackedView<LearnLessonViewModel> {
Widget _buildMotivationCard() => const MotivationCard();
Widget _buildHeader() => Text(
LocaleKeys.lessons_in_module.tr(),
'Lessons in this module',
style: style18DG700,
);

View File

@ -1,10 +1,8 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:yimaru_app/app/app.router.dart';
import 'package:yimaru_app/models/learn_lesson.dart';
import 'package:yimaru_app/ui/common/enmus.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import '../../../app/app.locator.dart';
import '../../../models/learn_module.dart';
@ -33,10 +31,11 @@ class LearnLessonViewModel extends ReactiveViewModel {
Future<void> navigateToLearnPractice(int id) async =>
await _navigationService.navigateToLearnPracticeView(
id: id,
label: 'Start Practice',
practice: LearnPractices.lesson,
label:LocaleKeys.start_practice.tr(),
title: LocaleKeys.lets_practice_module.tr(),
subtitle:LocaleKeys.ask_you_few_actions.tr(),
title: 'Let\'s practice what you just learnt!',
subtitle:
'Ill ask you a few questions, and you can respond naturally.',
);
Future<void> navigateToLearnLessonDetail(

View File

@ -1,10 +1,8 @@
import 'package:chewie/chewie.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/models/learn_lesson.dart';
import 'package:yimaru_app/models/learn_module.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import '../../common/app_colors.dart';
import '../../common/enmus.dart';
@ -190,9 +188,9 @@ class LearnLessonDetailView extends StackedView<LearnLessonDetailViewModel> {
CustomElevatedButton(
height: 55,
borderRadius: 12,
text: 'Take Practice',
foregroundColor: kcWhite,
backgroundColor: kcPrimaryColor,
text:LocaleKeys.take_practice.tr() ,
onTap: () async => await _navigate(viewModel),
);
}

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/models/learn_module.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/widgets/learn_module_tile.dart';
import 'package:yimaru_app/ui/widgets/overall_progress.dart';
@ -99,7 +97,7 @@ class LearnModuleView extends StackedView<LearnModuleViewModel> {
);
Widget _buildSubtitle() => Text(
LocaleKeys.your_current_level.tr(),
'Your Current Level',
style: style14P400,
);

View File

@ -1,9 +1,7 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:yimaru_app/app/app.router.dart';
import 'package:yimaru_app/models/learn_module.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import '../../../app/app.locator.dart';
import '../../../services/learn_service.dart';
@ -38,10 +36,10 @@ class LearnModuleViewModel extends ReactiveViewModel {
{required int id, required String module}) async =>
await _navigationService.navigateToLearnPracticeView(
id: id,
label: 'Begin Module Practice',
practice: LearnPractices.module,
label: LocaleKeys.begin_module_practice.tr(),
subtitle: LocaleKeys.lets_quickly_review.tr(),
title: '${LocaleKeys.lets_practice_module.tr()} $module',
title: 'Lets Practice $module',
subtitle: 'Lets quickly review what youve learned in this module! ',
);
// Remote api call

View File

@ -1,5 +1,4 @@
import 'package:audioplayers/audioplayers.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:stacked/stacked.dart';
@ -13,7 +12,6 @@ import 'package:yimaru_app/ui/widgets/wave_wrapper.dart';
import '../../../../models/learn_question.dart';
import '../../../common/app_colors.dart';
import '../../../common/enmus.dart';
import '../../../common/translations/locale_keys.g.dart';
import '../../../common/ui_helpers.dart';
import '../../../widgets/custom_column_button.dart';
import '../../../widgets/small_app_bar.dart';
@ -127,7 +125,7 @@ class InteractLearnPracticeScreen
showBackButton: true,
onPop: () async =>
await _showSheet(context: context, viewModel: viewModel),
title: '${LocaleKeys.practice_speaking.tr()} ($index/${viewModel.questions.length})');
title: 'Practice Speaking ($index/${viewModel.questions.length})');
Widget _buildSpeakingIndicatorWrapper(LearnPracticeViewModel viewModel) =>
Column(
@ -154,13 +152,13 @@ class InteractLearnPracticeScreen
: const SizedBox(height: 20);
Widget _buildListeningLabel() => Text(
'Daniel ${LocaleKeys.speaking.tr()}',
'Daniel is speaking...',
style: style14P400,
textAlign: TextAlign.center,
);
Widget _buildSpeakingLabel() => Text(
'${ LocaleKeys.you_are_speaking.tr()}...',
'You\'re speaking...',
style: style14P400,
textAlign: TextAlign.center,
);
@ -239,7 +237,7 @@ class InteractLearnPracticeScreen
];
Widget _buildActionLabel() => Text(
LocaleKeys.tap_microphone.tr(),
'Tap the microphone to speak',
style: style14DG400,
textAlign: TextAlign.center,
);
@ -290,7 +288,7 @@ class InteractLearnPracticeScreen
Widget _buildReplyButton(LearnPracticeViewModel viewModel) =>
CustomColumnButton(
icon: Icons.replay,
label: LocaleKeys.reply.tr(),
label: 'Reply',
color: viewModel.recordingState == VoiceRecordingState.pending &&
viewModel.player.state != PlayerState.playing
? kcPrimaryColor
@ -358,8 +356,8 @@ class InteractLearnPracticeScreen
required LearnPracticeViewModel viewModel}) =>
CustomColumnButton(
color: kcRed,
label: 'Cancel',
icon: Icons.close,
label:LocaleKeys.cancel.tr() ,
onTap: () async =>
await _showSheet(context: context, viewModel: viewModel),
);

View File

@ -1,11 +1,9 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:yimaru_app/ui/widgets/no_data_indicator.dart';
import 'package:yimaru_app/ui/widgets/page_loading_indicator.dart';
import 'package:yimaru_app/ui/widgets/small_app_bar.dart';
import '../../../common/app_colors.dart';
import '../../../common/translations/locale_keys.g.dart';
import '../../../common/ui_helpers.dart';
class LearnLoadingScreen extends StatelessWidget {
@ -67,7 +65,7 @@ class LearnLoadingScreen extends StatelessWidget {
Align(alignment: Alignment.center, child: _buildRefreshButton());
Widget _buildRefreshButton() => NoDataIndicator(
onTap: onTap,
title: LocaleKeys.no_practice_available.tr(),
title: 'No practice available!',
onTap: onTap,
);
}

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart';
import '../../../common/app_colors.dart';
@ -133,13 +131,13 @@ class LearnPracticeAppreciationScreen
Widget _buildIcon() => SvgPicture.asset('assets/icons/success.svg');
Widget _buildTitle(LearnPracticeViewModel viewModel) => Text(
'${LocaleKeys.great_work.tr()}, ${viewModel.user?.firstName}',
'Great work, ${viewModel.user?.firstName}',
style: style25DG600,
textAlign: TextAlign.center,
);
Widget _buildSubtitle() => Text(
LocaleKeys.you_have_finished_practice.tr(),
'You have finished your practice',
style: style14DG400,
textAlign: TextAlign.center,
);
@ -154,10 +152,9 @@ class LearnPracticeAppreciationScreen
CustomElevatedButton(
height: 55,
borderRadius: 12,
text: 'View My Results',
foregroundColor: kcWhite,
onTap: () => viewModel.goTo(4),
backgroundColor: kcPrimaryColor,
text: LocaleKeys.view_results.tr(),
);
}

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart';
import '../../../common/app_colors.dart';
@ -63,7 +61,7 @@ class LearnPracticeCompletionScreen
);
Widget _buildTitle() => Text(
'${LocaleKeys.you_have_completed.tr()} $level ',
'Yay, youve completed $level ',
style: style25DG600,
textAlign: TextAlign.center,
);
@ -83,9 +81,9 @@ class LearnPracticeCompletionScreen
CustomElevatedButton(
height: 55,
borderRadius: 12,
text: 'Continue',
onTap: viewModel.pop,
foregroundColor: kcWhite,
text: LocaleKeys.cont.tr(),
backgroundColor: kcPrimaryColor,
);
}

View File

@ -1,12 +1,10 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/helper_functions.dart';
import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart';
import '../../../common/app_colors.dart';
import '../../../common/translations/locale_keys.g.dart';
import '../../../common/ui_helpers.dart';
import '../../../widgets/cancel_learn_practice_sheet.dart';
import '../../../widgets/custom_elevated_button.dart';
@ -177,9 +175,9 @@ class LearnPracticeDescriptionScreen
CustomElevatedButton(
height: 55,
borderRadius: 12,
text: 'Start Practice',
foregroundColor: kcWhite,
onTap: () => viewModel.goTo(2),
backgroundColor: kcPrimaryColor,
text: LocaleKeys.start_practice.tr() ,
);
}

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart';
import '../../../common/app_colors.dart';
@ -61,7 +59,7 @@ class LearnPracticeFinishScreen
Widget _buildAppBar(LearnPracticeViewModel viewModel) => SmallAppBar(
showBackButton: true,
onPop: viewModel.goBack,
title:LocaleKeys.practice_speaking.tr(),
title: 'Practice Speaking',
);
Widget _buildSpeakingIndicatorWrapper(LearnPracticeViewModel viewModel) =>
@ -81,13 +79,13 @@ class LearnPracticeFinishScreen
Widget _buildIcon() => SvgPicture.asset('assets/icons/success.svg');
Widget _buildTitle() => Text(
LocaleKeys.practice_completed.tr(),
'Practice Completed!',
style: style25DG600,
textAlign: TextAlign.center,
);
Widget _buildSubtitle() => Text(
LocaleKeys.sound_confident.tr() ,
'You sound more confident this time - great improvement!',
style: style14DG400,
textAlign: TextAlign.center,
);
@ -119,18 +117,18 @@ class LearnPracticeFinishScreen
borderRadius: 12,
onTap: viewModel.pop,
foregroundColor: kcWhite,
text: 'Continue Practice',
backgroundColor: kcPrimaryColor,
text: LocaleKeys.continue_practice.tr() ,
);
Widget _buildPracticeAgainButton(LearnPracticeViewModel viewModel) =>
CustomElevatedButton(
height: 55,
borderRadius: 12,
text: 'Practice Again',
backgroundColor: kcWhite,
borderColor: kcPrimaryColor,
foregroundColor: kcPrimaryColor,
text: LocaleKeys.practice_again.tr(),
onTap: () async => await _reset(viewModel),
);
}

View File

@ -1,7 +1,5 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart';
import '../../../common/app_colors.dart';
@ -176,7 +174,7 @@ class LearnPracticeIntroScreen extends ViewModelWidget<LearnPracticeViewModel> {
Widget _buildPartnerName() => Text.rich(
TextSpan(text: 'Daniel', style: style14DG600, children: [
TextSpan(
text: ' - ${LocaleKeys.speaking_partner.tr()}',
text: ' - Your Speaking Partner',
style: style14MG400,
)
]),

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.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/views/learn_practice/learn_practice_viewmodel.dart';
import 'package:yimaru_app/ui/widgets/learn_practice_tip_section.dart';
import 'package:yimaru_app/ui/widgets/learn_practice_results_wrapper.dart';
@ -114,8 +112,8 @@ class LearnPracticeResultScreen
{required BuildContext context,
required LearnPracticeViewModel viewModel}) =>
SmallAppBar(
title: 'Result',
showBackButton: true,
title:LocaleKeys.result.tr(),
onPop: () async =>
await _showSheet(context: context, viewModel: viewModel),
);
@ -174,9 +172,9 @@ class LearnPracticeResultScreen
Widget _buildContinueButton(LearnPracticeViewModel viewModel) =>
CustomElevatedButton(
height: 55,
text: 'Continue',
borderRadius: 12,
foregroundColor: kcWhite,
text:LocaleKeys.cont.tr(),
backgroundColor: kcPrimaryColor,
onTap: () async => await _navigate(viewModel),
);
@ -184,10 +182,10 @@ class LearnPracticeResultScreen
Widget _buildPracticeAgainButton(LearnPracticeViewModel viewModel) =>
CustomElevatedButton(
height: 55,
text: 'Retry',
borderRadius: 12,
backgroundColor: kcWhite,
borderColor: kcPrimaryColor,
text: LocaleKeys.retry.tr(),
foregroundColor: kcPrimaryColor,
onTap: () async => await _retry(viewModel),
);

View File

@ -1,7 +1,5 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart';
import 'package:yimaru_app/ui/widgets/custom_column_button.dart';
@ -108,8 +106,7 @@ class StartLearnPracticeScreen extends ViewModelWidget<LearnPracticeViewModel> {
showBackButton: true,
onPop: () async =>
await _showSheet(context: context, viewModel: viewModel),
title:
'${LocaleKeys.practice_speaking.tr()} ($index/${viewModel.questions.length})');
title: 'Practice Speaking ($index/${viewModel.questions.length})');
Widget _buildSheet(LearnPracticeViewModel viewModel) =>
CancelLearnPracticeSheet(
@ -170,7 +167,7 @@ class StartLearnPracticeScreen extends ViewModelWidget<LearnPracticeViewModel> {
);
Widget _buildStartText() => Text(
LocaleKeys.start.tr(),
'Start',
style: style25W600,
);
@ -196,7 +193,7 @@ class StartLearnPracticeScreen extends ViewModelWidget<LearnPracticeViewModel> {
];
Widget _buildActionLabel() => Text(
LocaleKeys.tap_start_to_listen.tr() ,
'Tap the start button to listen',
style: style14DG400,
textAlign: TextAlign.center,
);
@ -215,8 +212,8 @@ class StartLearnPracticeScreen extends ViewModelWidget<LearnPracticeViewModel> {
Widget _buildReplyButtonWrapper() => Expanded(child: _buildReplyButton());
Widget _buildReplyButton() => CustomColumnButton(
icon: Icons.replay, label:LocaleKeys.reply.tr() , color: kcLightGrey);
Widget _buildReplyButton() => const CustomColumnButton(
icon: Icons.replay, label: 'Reply', color: kcLightGrey);
Widget _buildMicButtonWrapper(LearnPracticeViewModel viewModel) =>
Expanded(child: _buildMicButton(viewModel));

View File

@ -1,9 +1,7 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/app_colors.dart';
import 'package:yimaru_app/ui/common/helper_functions.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';
@ -94,14 +92,18 @@ class FullNameFormScreen extends ViewModelWidget<OnboardingViewModel> {
onLanguage: () async => await viewModel.navigateToLanguage(),
);
Widget _buildTitle() => Text(
'${LocaleKeys.what_should_we_call_you.tr()} 😊',
style:style25DG600,
Widget _buildTitle() => const Text(
'What should we call you? 😊',
style: TextStyle(
fontSize: 25,
color: kcDarkGrey,
fontWeight: FontWeight.w600,
),
);
Widget _buildSubtitle() => Text(
LocaleKeys.use_for_personalization.tr(),
style:style14MG400,
Widget _buildSubtitle() => const Text(
'Well use your name to personalize your learning journey.',
style: TextStyle(color: kcMediumGrey),
);
Widget _buildFullNameFormField(OnboardingViewModel viewModel) =>
@ -109,8 +111,8 @@ class FullNameFormScreen extends ViewModelWidget<OnboardingViewModel> {
controller: fullNameController,
onTap: viewModel.setFullNameFocus,
decoration: inputDecoration(
hint: 'Enter Your Name',
focus: viewModel.focusFullName,
hint: LocaleKeys.enter_full_name.tr(),
filled: fullNameController.text.isNotEmpty),
);
@ -132,9 +134,9 @@ class FullNameFormScreen extends ViewModelWidget<OnboardingViewModel> {
Widget _buildContinueButton(OnboardingViewModel viewModel) =>
CustomElevatedButton(
height: 55,
text: 'Continue',
borderRadius: 12,
foregroundColor: kcWhite,
text: LocaleKeys.cont.tr(),
backgroundColor: fullNameController.text.isNotEmpty &&
!viewModel.hasFullNameValidationMessage
? kcPrimaryColor

View File

@ -158,7 +158,7 @@ class ProfileView extends StackedView<ProfileViewModel> {
List<Widget> _buildSettingsChildren(ProfileViewModel viewModel) => [
// _buildDownloadsCard(viewModel),
// _buildProgressCard(viewModel),
_buildProgressCard(viewModel),
_buildAccountCard(viewModel),
_buildSupportCard(viewModel)
];
@ -174,7 +174,7 @@ class ProfileView extends StackedView<ProfileViewModel> {
icon: Icons.stacked_bar_chart,
title: LocaleKeys.my_progress.tr(),
subtitle: LocaleKeys.track_your_achievement.tr(),
onTap: () async => await viewModel.navigateToProgress(),
// onTap: () async => await viewModel.navigateToProgress(),
);
Widget _buildAccountCard(ProfileViewModel viewModel) => ProfileCard(

View File

@ -1,10 +1,8 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:yimaru_app/app/app.router.dart';
import 'package:yimaru_app/services/image_picker_service.dart';
import 'package:yimaru_app/ui/common/enmus.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import '../../../app/app.locator.dart';
import '../../../models/user.dart';
@ -66,13 +64,13 @@ class ProfileViewModel extends ReactiveViewModel {
// Dialog
Future<bool?> showAbortDialog() async {
DialogResponse? response = await _dialogService.showDialog(
title: 'Logout',
cancelTitle: 'No',
buttonTitle: 'Yes',
barrierDismissible: true,
cancelTitleColor: kcDarkGrey,
buttonTitleColor: kcPrimaryColor,
title: LocaleKeys.logout.tr(),
cancelTitle: LocaleKeys.no.tr(),
buttonTitle: LocaleKeys.yes.tr(),
description: LocaleKeys.want_to_quit.tr(),
description: 'Are you sure you want to quit?',
);
return response?.confirmed;
}

View File

@ -1,6 +1,7 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked/stacked_annotations.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/app_constants.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/widgets/circular_icon.dart';
import '../../common/app_colors.dart';
@ -54,7 +52,7 @@ class TelegramSupportView extends StackedView<TelegramSupportViewModel> {
Widget _buildAppbar(TelegramSupportViewModel viewModel) => SmallAppBar(
onPop: viewModel.pop,
showBackButton: true,
title: LocaleKeys.telegram_support.tr(),
title: 'Telegram Support',
);
Widget _buildExpandedColumn(TelegramSupportViewModel viewModel) =>
@ -95,13 +93,13 @@ class TelegramSupportView extends StackedView<TelegramSupportViewModel> {
const CircularIcon(icon: Icons.telegram, size: 50, color: kcSkyBlue);
Widget _buildTitle() => Text(
LocaleKeys.join_telegram.tr(),
'Join Yimaru Academy on Telegram',
style: style25DG600,
textAlign: TextAlign.center,
);
Widget _buildSubtitle() => Text(
LocaleKeys.connect_with_support_team.tr(),
'Connect with our support team instantly on Telegram for quick assistance and community updates',
style: style14MG400,
textAlign: TextAlign.center,
);
@ -125,17 +123,17 @@ class TelegramSupportView extends StackedView<TelegramSupportViewModel> {
CustomElevatedButton(
height: 55,
borderRadius: 12,
text: 'Open in Telegram',
foregroundColor: kcWhite,
leadingIcon: Icons.telegram,
backgroundColor: kcPrimaryColor,
text: LocaleKeys.open_in_telegram.tr(),
onTap: () async => await viewModel.launchTelegram(),
);
Widget _buildOptionTextDivider() => const OptionTextDivider();
Widget _buildSearchText() => Text.rich(
TextSpan(text: LocaleKeys.search_for.tr(), style: style14DG500, children: [
TextSpan(text: 'Search for', style: style14DG500, children: [
TextSpan(
style: style14P600,
text: ' $kTelegramSupport',

View File

@ -1,6 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/widgets/speaking_partner_image.dart';
import '../common/app_colors.dart';
@ -53,11 +51,8 @@ class CancelLearnPracticeSheet extends StatelessWidget {
);
Widget _buildMessage() => Text.rich(
TextSpan(
text: '${LocaleKeys.almost_there.tr()},',
style: style18DG700,
children: [
TextSpan(
TextSpan(text: 'Youre almost there,', style: style18DG700, children: [
TextSpan(
text: ' $user',
style: style18P600,
)
@ -65,7 +60,7 @@ class CancelLearnPracticeSheet extends StatelessWidget {
);
Widget _buildSubtitle() => Text(
LocaleKeys.finish_session.tr(),
'Finish this session to see your progress.',
style: style14DG400,
textAlign: TextAlign.center,
);
@ -75,17 +70,17 @@ class CancelLearnPracticeSheet extends StatelessWidget {
onTap: onContinue,
borderRadius: 12,
foregroundColor: kcWhite,
text: 'Continue Practice',
backgroundColor: kcPrimaryColor,
text: LocaleKeys.continue_practice.tr(),
);
Widget _buildEndButton() => CustomElevatedButton(
height: 55,
onTap: onCancel,
borderRadius: 12,
text: 'End Session',
backgroundColor: kcWhite,
borderColor: kcPrimaryColor,
foregroundColor: kcPrimaryColor,
text: LocaleKeys.end_session.tr(),
);
}

View File

@ -1,7 +1,5 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/widgets/progress_status.dart';
import '../../models/learn_course.dart';
@ -109,9 +107,9 @@ class LearnCourseTile extends ViewModelWidget<LearnCourseViewModel> {
? _buildProgressStatus()
: Container();
Widget _buildProgressStatus() => ProgressStatus(
Widget _buildProgressStatus() => const ProgressStatus(
color: kcPrimaryColor,
status: LocaleKeys.current_level.tr(),
status: 'Current Level',
);
Widget _buildContent() => Text(
@ -145,9 +143,9 @@ class LearnCourseTile extends ViewModelWidget<LearnCourseViewModel> {
height: 15,
borderRadius: 12,
onTap: onViewTap,
text: 'View Course',
foregroundColor: kcWhite,
backgroundColor: kcPrimaryColor,
text:LocaleKeys.view_course.tr(),
);
Widget _buildPracticeButtonWrapper(LearnCourseViewModel viewModel) =>
@ -160,9 +158,9 @@ class LearnCourseTile extends ViewModelWidget<LearnCourseViewModel> {
height: 15,
borderRadius: 12,
onTap: onPracticeTap,
text: 'Take Practice',
backgroundColor: kcWhite,
borderColor: kcPrimaryColor,
foregroundColor: kcPrimaryColor,
text:LocaleKeys.take_practice.tr() ,
);
}

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/models/learn_lesson.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_lesson/learn_lesson_viewmodel.dart';
import 'package:yimaru_app/ui/widgets/mini_thumbnail.dart';
@ -130,7 +128,7 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
);
Widget _buildProgressText() => Text(
(lesson.access?.isCompleted ?? false) ?LocaleKeys.completed.tr() : LocaleKeys.in_progress.tr() ,
(lesson.access?.isCompleted ?? false) ? 'Completed' : 'In Progress',
style: style14P600,
);
@ -160,13 +158,13 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
Widget _buildPracticeButton(LearnLessonViewModel viewModel) =>
CustomElevatedButton(
height: 15,
text: 'Practice',
borderRadius: 12,
onTap: onPracticeTap,
trailingIcon: Icons.mic,
width: double.maxFinite,
backgroundColor: kcWhite,
borderColor: kcPrimaryColor,
text:LocaleKeys.practice.tr() ,
foregroundColor: kcPrimaryColor,
);
@ -178,11 +176,11 @@ class LearnLessonTile extends ViewModelWidget<LearnLessonViewModel> {
Widget _buildLessonButton(LearnLessonViewModel viewModel) =>
CustomElevatedButton(
height: 15,
text: 'Start',
borderRadius: 12,
onTap: onLessonTap,
width: double.maxFinite,
foregroundColor: kcWhite,
text:LocaleKeys.start.tr() ,
trailingIcon: Icons.play_arrow,
backgroundColor: kcPrimaryColor,
);

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:yimaru_app/models/learn_module.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/views/learn_module/learn_module_viewmodel.dart';
import 'package:yimaru_app/ui/widgets/custom_container_shader.dart';
import 'package:yimaru_app/ui/widgets/custom_linear_progress_indicator.dart';
@ -193,9 +191,9 @@ class LearnModuleTile extends ViewModelWidget<LearnModuleViewModel> {
height: 15,
borderRadius: 12,
onTap: onModuleTap,
text: 'View Module',
foregroundColor: kcWhite,
backgroundColor: kcPrimaryColor,
text: LocaleKeys.view_module.tr(),
);
Widget _buildPracticeButtonWrapper(LearnModuleViewModel viewModel) =>
@ -208,10 +206,10 @@ class LearnModuleTile extends ViewModelWidget<LearnModuleViewModel> {
height: 15,
borderRadius: 12,
onTap: onPracticeTap,
text: 'Take Practices',
backgroundColor: kcWhite,
borderColor: kcPrimaryColor,
foregroundColor: kcPrimaryColor,
text:LocaleKeys.take_practice.tr(),
// onTap: () async => await viewModel.navigateToLearnPractice(practices),
);

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.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/views/learn_practice/learn_practice_viewmodel.dart';
import 'package:yimaru_app/ui/widgets/learn_practice_answer_card.dart';
@ -53,7 +51,7 @@ class LearnPracticeResultCard extends ViewModelWidget<LearnPracticeViewModel> {
Widget _buildSampleResponse() => LearnPracticeAnswerCard(
answer: answer,
voice: Voice.sample,
title:LocaleKeys.sample_answer.tr() ,
title: 'Sample Answer',
);
Widget _buildActualResponseWrapper() =>
@ -61,8 +59,7 @@ class LearnPracticeResultCard extends ViewModelWidget<LearnPracticeViewModel> {
Widget _buildActualResponse() => LearnPracticeAnswerCard(
answer: answer,
title: 'Your Answer',
voice: Voice.recorded,
title: LocaleKeys.your_answer.tr(),
);
);
}

View File

@ -1,7 +1,5 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.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/views/learn_practice/learn_practice_viewmodel.dart';
import 'package:yimaru_app/ui/widgets/learn_practice_result_card.dart';
@ -35,7 +33,7 @@ class LearnPracticeResultsWrapper
[_buildTitle(), verticalSpaceSmall, _buildResults(viewModel)];
Widget _buildTitle() => Text(
LocaleKeys.conversation_review.tr(),
'Conversation Review',
style: style16DG600,
textAlign: TextAlign.center,
);

View File

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.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/views/learn_practice/learn_practice_viewmodel.dart';
@ -41,7 +39,7 @@ class LearnPracticeTipSection extends ViewModelWidget<LearnPracticeViewModel> {
);
Widget _buildTitle() => Text(
LocaleKeys.quick_tip.tr(),
'Quick Tip',
style: style16B600,
);

View File

@ -24,7 +24,7 @@ class LearnProgramTile extends ViewModelWidget<LearnProgramViewModel> {
Widget _buildExpansionTileCardWrapper(LearnProgramViewModel viewModel) =>
GestureDetector(
// onTap: !(program.access?.isAccessible ?? false) ? onLockTap : null,
onTap: !(program.access?.isAccessible ?? false) ? onLockTap : null,
child: _buildExpansionTileCard(viewModel),
);

View File

@ -1,6 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import '../common/app_colors.dart';
import '../common/ui_helpers.dart';
@ -46,7 +44,7 @@ class ModuleProgress extends StatelessWidget {
[_buildProgressInfo(), _buildProgress()];
Widget _buildProgressInfo() => Text(
'$progress% ${LocaleKeys.progress.tr()}',
'$progress% Progress',
style: style16DG400,
);

View File

@ -1,6 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
import 'package:yimaru_app/ui/common/ui_helpers.dart';
import '../common/app_colors.dart';
@ -33,7 +31,7 @@ class MotivationCard extends StatelessWidget {
Widget _buildText() => Expanded(
child: Text(
LocaleKeys.keep_going.tr(),
'Lets keep going — youre more than halfway there!',
maxLines: 2,
style: style14DG400,
),

View File

@ -1,7 +1,5 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.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_linear_progress_indicator.dart';
@ -50,7 +48,7 @@ class OverallProgress extends StatelessWidget {
[_buildProgressInfo(), _buildProgress()];
Widget _buildProgressInfo() => Text(
LocaleKeys.overall_progress.tr(),
'Overall Progress',
style: style16DG600,
);
@ -66,7 +64,7 @@ class OverallProgress extends StatelessWidget {
);
Widget _buildSubtitle() => Text(
LocaleKeys.keep_up_the_great_work.tr(),
'Keep up the great work! You\'re doing amazing.',
style: style14DG500,
);
}

View File

@ -1,5 +1,5 @@
name: yimaru_app
version: 0.1.19+21
version: 0.1.18+20
publish_to: 'none'
description: A new Flutter project.