1

我是初学者颤振开发人员,我想获得支持,我设计了欢迎页面并将背景图像放入容器中,但我希望它在欢迎页面上的用户时永远缩放和重新缩放,我只想学习动画控制器以及如何使用它们。我怎样才能在我的代码中实现这一点。感谢您有一个愉快的一天。


    import 'package:flutter/material.dart';
    import 'package:animated_text_kit/animated_text_kit.dart';
    import 'file:///C:/Users/yagiz/AndroidStudioProjects/naber/lib/screens/login_screen.dart';
    import 'file:///C:/Users/yagiz/AndroidStudioProjects/naber/lib/screens/registration_screen.dart';
    import '../widgets.dart';
    import 'package:naber/constants.dart';

    class WelcomeScreen extends StatefulWidget {
      static String id="welcome_screen";
      @override
      _WelcomeScreenState createState() => _WelcomeScreenState();
    }

class _WelcomeScreenState extends State<WelcomeScreen> with TickerProviderStateMixin {
  bool isFinished;
  AnimationController controllerForContainerHeight;
  AnimationController controllerForContainerWidth;
  Animation scaleAnimationForContainerWidth;
  Animation scaleAnimationForContainerHeight;

  @override
  void initState(){
    super.initState();
    controllerForContainerWidth=AnimationController(duration:(Duration(seconds: 2)),vsync: this);
    scaleAnimationForContainerWidth=Tween<double>(begin: 1080, end: 1380).animate(controllerForContainerWidth);
    controllerForContainerWidth.forward();
    controllerForContainerWidth.addListener(() {
      setState(() {
      });
    });
    controllerForContainerWidth.addStatusListener((status) {
      if(status==AnimationStatus.completed){
        controllerForContainerWidth.reverse();
      }
      if(status==AnimationStatus.dismissed){
        controllerForContainerWidth.forward();
      }
    });
    controllerForContainerHeight=AnimationController(duration:(Duration(seconds: 2)),vsync: this);
    scaleAnimationForContainerHeight=Tween<double>(begin: 1920, end: 2220).animate(controllerForContainerHeight);
    controllerForContainerHeight.forward();
    controllerForContainerHeight.addListener(() {
      setState(() {
      });
    });
    controllerForContainerHeight.addStatusListener((status) {
      setState(() {
        if(status==AnimationStatus.completed){
          controllerForContainerHeight.reverse();
        }
        if(status==AnimationStatus.dismissed){
          controllerForContainerHeight.forward();
        }
      });
    });
    controllerForContainerHeight.repeat(reverse: true);
  }
  @override
  void dispose(){
    controllerForContainerWidth.dispose();
    controllerForContainerHeight.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: AnimatedBuilder(
        animation: controllerForContainerHeight,
        builder: (BuildContext context,_){
          return AnimatedBuilder(
            animation: controllerForContainerWidth,
            builder: (BuildContext context,_){
              return Container(
                width: controllerForContainerWidth.value,
                height: controllerForContainerHeight.value,
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image: AssetImage(kWelcomeScreenBackgroundImage),
                    fit: BoxFit.cover,
                  ),
                ),
                child: Padding(
                  padding: EdgeInsets.all(20.0),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.start,
                        textBaseline: TextBaseline.alphabetic,
                        crossAxisAlignment: CrossAxisAlignment.end,
                        children: [
                          Hero(
                            tag: "logo",
                            child: Container(
                              child: Image.asset(kLogoImage),
                              height: 140,
                            ),
                          ),
                          TypewriterAnimatedTextKit(
                            speed: Duration(milliseconds:200),
                            text:[kWelcomePageText],
                            textStyle: kWelcomePageTextStyle,
                          ),
                        ],
                      ),
                      SizedBox(
                        height: 70,
                      ),
                      WelcomeScreenButtons(text:kLoginText,color1:kLoginButtonColor1,
                          color2:kLoginButtonColor2,
                          color3:kLoginButtonColor3,route: LoginScreen.id),
                      SizedBox(height: 15),
                      WelcomeScreenButtons(text:kRegistrationText,color1:kRegisterButtonColor1,
                          color2:kRegisterButtonColor2,
                          color3:kRegisterButtonColor3,route: RegistrationScreen.id),
                    ],
                  ),
                ),
              );
            }
          );
        }
      ),
    );
  }
}



4

0 回答 0