import 'package:dreampad/app/modules/welcome/views/hello_widget.dart'; import 'package:dreampad/app/modules/welcome/views/input_widget.dart'; import 'package:dreampad/app/modules/welcome/views/partner_widget.dart'; import 'package:dreampad/app/shared/shared.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:get/get.dart'; import '../controllers/welcome_controller.dart'; import 'splash_view.dart'; class WelcomeView extends GetView { const WelcomeView({super.key}); @override Widget build(BuildContext context) { return SwipeNextPageContainer( children: [ const _Background(), HookBuilder(builder: (context) { final currentIndexState = SwipeNextPageContainer.of(context)!.currentIndex; final showWelcomeView = useListenableSelector( currentIndexState, () => currentIndexState.value == 1); return AnimatedVisibilityWidget( isVisible: showWelcomeView, animationWidgetBuilder: AnimatedVisibilityWidget.fadeAnimationWidgetBuilder, child: Visibility( visible: showWelcomeView, child: SwipeNextPageContainer( children: [ SwipePageCurrentVisible( child: HookBuilder(builder: (context) { final finishInput = useState(false); final showPartner = useState(false); return showPartner.value ? const PartnerWidget() : AnimatedVisibilityWidget( isVisible: !finishInput.value, duration: const Duration(milliseconds: 800), animationWidgetBuilder: AnimatedVisibilityWidget .fadeAnimationWidgetBuilder, onDone: (visible) { if (!visible) { showPartner.value = true; } }, child: InputWidget( onFinished: () { finishInput.value = true; }, ), ); }), ), const SwipePageFadeOutContainer( child: HelloWidget(), ), ], ), ), ); }), const SwipePageFadeOutContainer( child: SplashView(), ), ], ); } } class _Background extends StatelessWidget { const _Background(); @override Widget build(BuildContext context) { return LayoutBuilder(builder: (context, constraint) { final controller = SwipeNextPageContainer.of(context)!.controller; final currentIndexState = SwipeNextPageContainer.of(context)!.currentIndex; return HookBuilder(builder: (context) { final currentIndex = useListenableSelector(currentIndexState, () { return currentIndexState.value; }); return AnimatedBuilder( animation: controller, builder: (context, _) { final animationValue = currentIndex == 2 ? controller.value : controller.upperBound; return Stack( children: [ Positioned( top: 0 - animationValue + 1, left: -2, right: 2, child: Container( width: constraint.maxWidth, height: constraint.maxHeight, decoration: const BoxDecoration( image: DecorationImage( image: Images.splashBg, fit: BoxFit.fill, ), ), ), ), Positioned( top: controller.upperBound - animationValue, left: 0, right: 0, child: Container( width: constraint.maxWidth, height: constraint.maxHeight, decoration: const BoxDecoration( image: DecorationImage( image: Images.welcomeBg, fit: BoxFit.fill, ), ), ), ), ], ); }); }); }); } }