From 5514e8510c7a43afc529f7b8f428e19c6857de89 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Sun, 21 Dec 2025 14:15:39 +0330 Subject: [PATCH] =?UTF-8?q?=D9=85=D8=B4=DA=A9=D9=84=D8=A7=D8=AA=20=D8=A7?= =?UTF-8?q?=D9=86=DB=8C=D9=85=DB=8C=D8=B4=D9=86=20=D9=87=D8=A7=D8=AF=DB=8C?= =?UTF-8?q?=20=D9=88=20=D9=87=D8=AF=DB=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widgets/answer_box/answer_box_show.dart | 2 +- .../answer_box/styles/picture_box.dart | 4 +- .../presentation/bloc/question_bloc.dart | 4 ++ .../ui/screens/question_screen.dart | 67 ++++++++++--------- 4 files changed, 43 insertions(+), 34 deletions(-) diff --git a/lib/core/widgets/answer_box/answer_box_show.dart b/lib/core/widgets/answer_box/answer_box_show.dart index ee524fc..75d7bea 100644 --- a/lib/core/widgets/answer_box/answer_box_show.dart +++ b/lib/core/widgets/answer_box/answer_box_show.dart @@ -34,7 +34,7 @@ class AnswerBoxShow extends StatelessWidget { selected: false, index: index, image: answer.image ?? '', - autostart: Autostart.once, + autostart: Autostart.loop, correctAnswer: 0, ), Positioned( diff --git a/lib/core/widgets/answer_box/styles/picture_box.dart b/lib/core/widgets/answer_box/styles/picture_box.dart index c7d4689..64915a9 100644 --- a/lib/core/widgets/answer_box/styles/picture_box.dart +++ b/lib/core/widgets/answer_box/styles/picture_box.dart @@ -52,7 +52,7 @@ class AnswerPictureBox extends StatelessWidget { width: context.widthScreen, height: context.heightScreen, image: FileImage(File(image)), - fps: 30, + fps: 25, autostart: autostart, fit: BoxFit.cover, color: MyColors.black, @@ -63,7 +63,7 @@ class AnswerPictureBox extends StatelessWidget { width: context.widthScreen, height: context.heightScreen, image: FileImage(File(image)), - fps: 30, + fps: 25, autostart: autostart, fit: BoxFit.cover, ), diff --git a/lib/features/question/presentation/bloc/question_bloc.dart b/lib/features/question/presentation/bloc/question_bloc.dart index 910d465..6271771 100644 --- a/lib/features/question/presentation/bloc/question_bloc.dart +++ b/lib/features/question/presentation/bloc/question_bloc.dart @@ -45,6 +45,7 @@ class QuestionBloc extends Bloc { _backgroundAudioService.dispose(); answerAnimationController.dispose(); imageAnimationController.dispose(); + scrollController.dispose(); return super.close(); } @@ -76,6 +77,7 @@ class QuestionBloc extends Bloc { final AudioService _effectAudioService; late final AnimationController answerAnimationController; late final AnimationController imageAnimationController; + final ScrollController scrollController = ScrollController(); /// ------------Functions------------ // void startScrollTitle({Duration? audioDuration}) { @@ -192,6 +194,7 @@ class QuestionBloc extends Bloc { } Future getNextLevelEvent({required BuildContext context}) async { + _backgroundAudioService.dispose(); await _getNextLevelUseCase(QuestionParams()).then((value) => value.fold( (data) { context.pushNamed( @@ -293,6 +296,7 @@ class QuestionBloc extends Bloc { answerAnimationController.reverse(); await Future.delayed(const Duration(seconds: 1)); imageAnimationController.forward(); + scrollController.jumpTo(0); await playQuestionAudio(); imageAnimationController.reverse(); answerAnimationController.forward().then((value) { diff --git a/lib/features/question/presentation/ui/screens/question_screen.dart b/lib/features/question/presentation/ui/screens/question_screen.dart index 506bf41..f57da2a 100644 --- a/lib/features/question/presentation/ui/screens/question_screen.dart +++ b/lib/features/question/presentation/ui/screens/question_screen.dart @@ -91,28 +91,30 @@ class _QuestionScreenState extends State with TickerProviderStat } Widget _questionImage(BuildContext context) { - return Column( - children: [ - const Spacer(), - BlocBuilder( - builder: (context, state) => FadeAnimDelayed( - duration: const Duration(seconds: 1), - child: FadeAnimController( - key: Key('${state.currentQuestion?.image}'), - controller: context.read().imageAnimationController, - child: AnswerPictureBox( + return FadeAnimDelayed( + duration: const Duration(seconds: 1), + child: FadeAnimController( + controller: context.read().imageAnimationController, + child: Column( + children: [ + 10.0.gapHeight, + _titles(context), + const Spacer(), + BlocBuilder( + builder: (context, state) => AnswerPictureBox( + key: Key('${state.currentQuestion?.image}'), selected: false, showIndex: false, correctAnswer: 0, index: 0, image: state.currentQuestion?.image ?? '', - autostart: Autostart.once, + autostart: Autostart.loop, ), ), - ), + const Spacer(), + ], ), - const Spacer(), - ], + ), ); } @@ -132,30 +134,33 @@ class _QuestionScreenState extends State with TickerProviderStat Widget _titles(BuildContext context) { return BlocBuilder( buildWhen: (previous, current) => - previous.currentQuestion?.id != current.currentQuestion?.id, - builder: (context, state) => FadeAnimController( - controller: context.read().answerAnimationController, - child: Text( - state.currentQuestion?.title ?? '', - textAlign: TextAlign.center, - style: MYTextStyle.titr1.copyWith( - shadows: [ - BoxShadow( - offset: const Offset(0, 2), - color: MyColors.black.withValues(alpha: 0.25), - ), - ], + previous.currentQuestion?.id != current.currentQuestion?.id, + builder: (context, state) => + Text( + state.currentQuestion?.title ?? '', + textAlign: TextAlign.center, + style: MYTextStyle.titr1.copyWith( + shadows: [ + BoxShadow( + offset: const Offset(0, 2), + color: MyColors.black.withValues(alpha: 0.25), + ), + ], + ), ), - ), - ), ); } Widget _answers(BuildContext context) { return ListView( + controller: context.read().scrollController, + padding: const EdgeInsets.only(top: 10), children: [ - _titles(context), - 30.0.gapHeight, + FadeAnimController( + controller: context.read().answerAnimationController, + child: _titles(context), + ), + 50.0.gapHeight, BlocBuilder( buildWhen: (previous, current) => previous.currentQuestion?.id != current.currentQuestion?.id,