From c2fc40fc3bce708c66f9331695860ef5616e58d6 Mon Sep 17 00:00:00 2001 From: BisratHailu Date: Fri, 1 May 2026 11:38:25 +0300 Subject: [PATCH] fix(learn): Fix learn practice pop issue --- .../screens/assessment_questions_screen.dart | 1 - .../assessment/screens/assessment_result_screen.dart | 1 - lib/ui/views/home/home_view.dart | 2 -- lib/ui/views/learn_practice/learn_practice_view.dart | 10 +++++++--- .../screens/interact_learn_practice_screen.dart | 8 ++++---- .../learn_practice/screens/learn_loading_screen.dart | 2 -- .../screens/learn_practice_intro_screen.dart | 6 ++++-- .../screens/learn_practice_result_screen.dart | 5 +++-- .../screens/start_learn_practice_screen.dart | 5 +++-- lib/ui/views/profile/profile_view.dart | 1 - 10 files changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/ui/views/assessment/screens/assessment_questions_screen.dart b/lib/ui/views/assessment/screens/assessment_questions_screen.dart index 79dce82..09ef464 100644 --- a/lib/ui/views/assessment/screens/assessment_questions_screen.dart +++ b/lib/ui/views/assessment/screens/assessment_questions_screen.dart @@ -6,7 +6,6 @@ import 'package:yimaru_app/ui/widgets/custom_elevated_button.dart'; import 'package:yimaru_app/ui/widgets/custom_small_radio_button.dart'; import 'package:yimaru_app/ui/widgets/large_app_bar.dart'; -import '../../../widgets/assessment_loading_screen.dart'; import '../assessment_viewmodel.dart'; class AssessmentQuestionsScreen extends ViewModelWidget { diff --git a/lib/ui/views/assessment/screens/assessment_result_screen.dart b/lib/ui/views/assessment/screens/assessment_result_screen.dart index bbdea59..26ce96b 100644 --- a/lib/ui/views/assessment/screens/assessment_result_screen.dart +++ b/lib/ui/views/assessment/screens/assessment_result_screen.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:stacked/stacked.dart'; import 'package:yimaru_app/ui/common/app_colors.dart'; -import 'package:yimaru_app/ui/common/enmus.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/widgets/large_app_bar.dart'; diff --git a/lib/ui/views/home/home_view.dart b/lib/ui/views/home/home_view.dart index ce4e9f7..cf45d50 100644 --- a/lib/ui/views/home/home_view.dart +++ b/lib/ui/views/home/home_view.dart @@ -5,8 +5,6 @@ import 'package:yimaru_app/ui/views/learn_program/learn_program_view.dart'; import 'package:yimaru_app/ui/views/profile/profile_view.dart'; import 'package:yimaru_app/ui/widgets/coming_soon.dart'; -import '../../common/enmus.dart'; -import '../../widgets/page_loading_indicator.dart'; import 'home_viewmodel.dart'; class HomeView extends StackedView { diff --git a/lib/ui/views/learn_practice/learn_practice_view.dart b/lib/ui/views/learn_practice/learn_practice_view.dart index 99e4234..c9ebcd2 100644 --- a/lib/ui/views/learn_practice/learn_practice_view.dart +++ b/lib/ui/views/learn_practice/learn_practice_view.dart @@ -21,8 +21,8 @@ class LearnPracticeView extends StackedView { : super(key: key); Future _cancel(LearnPracticeViewModel viewModel) async { + await viewModel.stopRecording(); viewModel.pop(); - viewModel.stopRecording(); viewModel.pop(); } @@ -59,8 +59,12 @@ class LearnPracticeView extends StackedView { required LearnPracticeViewModel viewModel}) => PopScope( canPop: false, - onPopInvokedWithResult: (value, data) async => - await _showSheet(context: context, viewModel: viewModel), + onPopInvokedWithResult: (didPop, data) { + if (!didPop) { + Future.microtask(()async =>await _showSheet(context: context, viewModel: viewModel)); + } + }, + child: _buildScaffoldWrapper(viewModel)); Widget _buildSheet(LearnPracticeViewModel viewModel) => diff --git a/lib/ui/views/learn_practice/screens/interact_learn_practice_screen.dart b/lib/ui/views/learn_practice/screens/interact_learn_practice_screen.dart index 2349d30..ef15c2c 100644 --- a/lib/ui/views/learn_practice/screens/interact_learn_practice_screen.dart +++ b/lib/ui/views/learn_practice/screens/interact_learn_practice_screen.dart @@ -7,7 +7,6 @@ import 'package:yimaru_app/ui/views/learn_practice/learn_practice_viewmodel.dart import 'package:yimaru_app/ui/widgets/cancel_learn_practice_sheet.dart'; import 'package:yimaru_app/ui/widgets/custom_circular_progress_indicator.dart'; import 'package:yimaru_app/ui/widgets/custom_linear_progress_indicator.dart'; -import 'package:yimaru_app/ui/widgets/page_loading_indicator.dart'; import 'package:yimaru_app/ui/widgets/wave_wrapper.dart'; import '../../../../models/learn_question.dart'; @@ -26,11 +25,11 @@ class InteractLearnPracticeScreen {super.key, required this.index, required this.question}); Future _cancel(LearnPracticeViewModel viewModel) async { + await viewModel.stopRecording(); viewModel.pop(); viewModel.pop(); - viewModel.stopRecording(); - } + } void _reply(LearnPracticeViewModel viewModel) => viewModel.replayVoicePrompt(question); @@ -360,7 +359,8 @@ class InteractLearnPracticeScreen onClose: viewModel.pop, onContinue: viewModel.pop, user: viewModel.user?.firstName ?? '', - onCancel: () async => await _cancel(viewModel), + onCancel: ()async => await _cancel(viewModel), + ); Widget _buildProgressIndicatorState(LearnPracticeViewModel viewModel) => diff --git a/lib/ui/views/learn_practice/screens/learn_loading_screen.dart b/lib/ui/views/learn_practice/screens/learn_loading_screen.dart index abeb8ad..55e1d03 100644 --- a/lib/ui/views/learn_practice/screens/learn_loading_screen.dart +++ b/lib/ui/views/learn_practice/screens/learn_loading_screen.dart @@ -5,8 +5,6 @@ import 'package:yimaru_app/ui/widgets/small_app_bar.dart'; import '../../../common/app_colors.dart'; import '../../../common/ui_helpers.dart'; -import '../../../widgets/large_app_bar.dart'; -import '../../../widgets/refresh_button.dart'; class LearnLoadingScreen extends StatelessWidget { final bool isEmpty; diff --git a/lib/ui/views/learn_practice/screens/learn_practice_intro_screen.dart b/lib/ui/views/learn_practice/screens/learn_practice_intro_screen.dart index 0e1bfe7..e2fc0fa 100644 --- a/lib/ui/views/learn_practice/screens/learn_practice_intro_screen.dart +++ b/lib/ui/views/learn_practice/screens/learn_practice_intro_screen.dart @@ -13,9 +13,10 @@ class LearnPracticeIntroScreen extends ViewModelWidget { const LearnPracticeIntroScreen({super.key}); Future _cancel(LearnPracticeViewModel viewModel) async { + await viewModel.stopRecording(); viewModel.pop(); viewModel.pop(); - viewModel.stopRecording(); + } Future _showSheet( @@ -81,7 +82,8 @@ class LearnPracticeIntroScreen extends ViewModelWidget { onClose: viewModel.pop, onContinue: viewModel.pop, user: viewModel.user?.firstName ?? '', - onCancel: () async => await _cancel(viewModel), + onCancel: ()async => await _cancel(viewModel), + ); Widget _buildBodyColumnWrapper(LearnPracticeViewModel viewModel) => Expanded( diff --git a/lib/ui/views/learn_practice/screens/learn_practice_result_screen.dart b/lib/ui/views/learn_practice/screens/learn_practice_result_screen.dart index 1901146..6b6ed57 100644 --- a/lib/ui/views/learn_practice/screens/learn_practice_result_screen.dart +++ b/lib/ui/views/learn_practice/screens/learn_practice_result_screen.dart @@ -20,9 +20,10 @@ class LearnPracticeResultScreen } Future _cancel(LearnPracticeViewModel viewModel) async { + await viewModel.stopRecording(); viewModel.pop(); viewModel.pop(); - viewModel.stopRecording(); + } Future _showSheet( @@ -95,7 +96,7 @@ class LearnPracticeResultScreen onClose: viewModel.pop, onContinue: viewModel.pop, user: viewModel.user?.firstName ?? '', - onCancel: () async => await _cancel(viewModel), + onCancel: ()async => await _cancel(viewModel), ); Widget _buildBodyWrapper(LearnPracticeViewModel viewMode) => Expanded( diff --git a/lib/ui/views/learn_practice/screens/start_learn_practice_screen.dart b/lib/ui/views/learn_practice/screens/start_learn_practice_screen.dart index 2665e7c..e827efa 100644 --- a/lib/ui/views/learn_practice/screens/start_learn_practice_screen.dart +++ b/lib/ui/views/learn_practice/screens/start_learn_practice_screen.dart @@ -17,9 +17,10 @@ class StartLearnPracticeScreen extends ViewModelWidget { {super.key, required this.index, required this.question}); Future _cancel(LearnPracticeViewModel viewModel) async { + await viewModel.stopRecording(); viewModel.pop(); viewModel.pop(); - viewModel.stopRecording(); + } void _start(LearnPracticeViewModel viewModel) { @@ -106,7 +107,7 @@ class StartLearnPracticeScreen extends ViewModelWidget { onClose: viewModel.pop, onContinue: viewModel.pop, user: viewModel.user?.firstName ?? '', - onCancel: () async => await _cancel(viewModel), + onCancel: ()async => await _cancel(viewModel), ); Widget _buildStartButtonWrapper(LearnPracticeViewModel viewModel) => Expanded( diff --git a/lib/ui/views/profile/profile_view.dart b/lib/ui/views/profile/profile_view.dart index 1e423a5..cf28032 100644 --- a/lib/ui/views/profile/profile_view.dart +++ b/lib/ui/views/profile/profile_view.dart @@ -3,7 +3,6 @@ import 'package:stacked/stacked.dart'; import 'package:yimaru_app/ui/common/app_colors.dart'; import 'package:yimaru_app/ui/common/enmus.dart'; import 'package:yimaru_app/ui/common/ui_helpers.dart'; -import 'package:yimaru_app/ui/widgets/page_loading_indicator.dart'; import 'package:yimaru_app/ui/widgets/profile_card.dart'; import 'package:yimaru_app/ui/widgets/profile_image.dart'; import 'package:yimaru_app/ui/widgets/view_profile_button.dart';