From 6f7a917632a65e9bef1fcc1ea5c5e6659f28f540 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Sat, 20 Dec 2025 12:27:46 +0330 Subject: [PATCH] fix: show image question with delayed --- .../widgets/animations/fade_anim_delayed.dart | 59 +++++++++++++++++++ .../presentation/bloc/question_bloc.dart | 1 + .../ui/screens/question_screen.dart | 24 ++++---- 3 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 lib/core/widgets/animations/fade_anim_delayed.dart diff --git a/lib/core/widgets/animations/fade_anim_delayed.dart b/lib/core/widgets/animations/fade_anim_delayed.dart new file mode 100644 index 0000000..1e925f0 --- /dev/null +++ b/lib/core/widgets/animations/fade_anim_delayed.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; + +class FadeAnimDelayed extends StatefulWidget { + const FadeAnimDelayed({ + super.key, + required this.child, + required this.duration, + }); + + final Widget child; + final Duration duration; + + @override + State createState() => _FadeAnimDelayedState(); +} + +class _FadeAnimDelayedState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(milliseconds: 500), + reverseDuration: Duration(seconds: 500), + ); + _animation = Tween( + begin: 0, + end: 1, + ).animate(CurvedAnimation(parent: _controller, curve: Curves.linear)); + + startAnim(); + } + + Future startAnim() async { + await Future.delayed(widget.duration, () { + _controller.forward(); + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + child: widget.child, + builder: (context, child) => + FadeTransition(opacity: _animation, child: child), + ); + } +} diff --git a/lib/features/question/presentation/bloc/question_bloc.dart b/lib/features/question/presentation/bloc/question_bloc.dart index 08873ad..2937190 100644 --- a/lib/features/question/presentation/bloc/question_bloc.dart +++ b/lib/features/question/presentation/bloc/question_bloc.dart @@ -291,6 +291,7 @@ class QuestionBloc extends Bloc { } else { showingAnswerSequence(show: true); answerAnimationController.reverse(); + await Future.delayed(Duration(seconds: 1)); imageAnimationController.forward(); await playQuestionAudio(); imageAnimationController.reverse(); diff --git a/lib/features/question/presentation/ui/screens/question_screen.dart b/lib/features/question/presentation/ui/screens/question_screen.dart index ba2f40b..4f5d106 100644 --- a/lib/features/question/presentation/ui/screens/question_screen.dart +++ b/lib/features/question/presentation/ui/screens/question_screen.dart @@ -13,6 +13,7 @@ import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; import 'package:hadi_hoda_flutter/core/widgets/animations/fade_anim.dart'; import 'package:hadi_hoda_flutter/core/widgets/animations/fade_anim_controller.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/fade_anim_delayed.dart'; import 'package:hadi_hoda_flutter/core/widgets/animations/globe_animation.dart'; import 'package:hadi_hoda_flutter/core/widgets/animations/slide_anim.dart'; import 'package:hadi_hoda_flutter/core/widgets/animations/slide_up_fade.dart'; @@ -94,16 +95,19 @@ class _QuestionScreenState extends State with TickerProviderStat children: [ Spacer(), BlocBuilder( - builder: (context, state) => FadeAnimController( - key: Key('${state.currentQuestion?.image}'), - controller: context.read().imageAnimationController, - child: AnswerPictureBox( - selected: false, - showIndex: false, - correctAnswer: 0, - index: 0, - image: state.currentQuestion?.image ?? '', - autostart: Autostart.once, + builder: (context, state) => FadeAnimDelayed( + duration: Duration(seconds: 1), + child: FadeAnimController( + key: Key('${state.currentQuestion?.image}'), + controller: context.read().imageAnimationController, + child: AnswerPictureBox( + selected: false, + showIndex: false, + correctAnswer: 0, + index: 0, + image: state.currentQuestion?.image ?? '', + autostart: Autostart.once, + ), ), ), ),