gpt4 book ai didi

Flutter FadeIn/FadeOut 动画在一起

转载 作者:IT王子 更新时间:2023-10-29 07:15:23 25 4
gpt4 key购买 nike

在这个简单的示例代码中,我想将 fadeIn 和 fadeOut 动画放在一起,但是在这段代码中,fadeIn 只起作用而 reverse 不起作用,我怎样才能将它们放在一起?

import 'package:flutter/material.dart';

void main()=>runApp(MaterialApp(home: FadeTransitionSample(),));
class FadeTransitionSample extends StatefulWidget {
@override
State<StatefulWidget> createState() => _Fade();
}

class _Fade extends State<FadeTransitionSample> with TickerProviderStateMixin {
AnimationController animation;
Animation<double> _fadeInFadeOut;

@override
void initState() {
super.initState();
animation = AnimationController(vsync: this, duration: Duration(seconds: 3),);
_fadeInFadeOut = Tween<double>(begin: 0.0, end: 0.1).animate(animation);

animation.addListener((){
if(animation.isCompleted){
animation.reverse();
}else{
animation.forward();
}
});
animation.repeat();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: FadeTransition(
opacity: animation,
child: Container(
color: Colors.green,
width: 100,
height: 100,
),
),
),
),
);
}
}

最佳答案

好吧,我假设您希望在您的容器上获得淡入淡出动画。

您需要更改一些内容。

  1. FadeTransition 类不应该采用 animation 来实现不透明度,而应该是 _fadeInFadeOut 变量
  2. 当您调用 animation.forward() 而不是 animation.repeat() 时,动画开始(因为在您的情况下,您还需要反转动画,总是从 animation.forward() 调用开始。

确保使用 addStatusListener() 方法而不是 addListener(),因为您可以更好地控制状态。

所以,所有这些放在一起,下面是使您的动画正常工作的工作代码。

import 'package:flutter/material.dart';

void main()=>runApp(MaterialApp(home: FadeTransitionSample(),));
class FadeTransitionSample extends StatefulWidget {
@override
State<StatefulWidget> createState() => _Fade();
}

class _Fade extends State<FadeTransitionSample> with TickerProviderStateMixin {
AnimationController animation;
Animation<double> _fadeInFadeOut;

@override
void initState() {
super.initState();
animation = AnimationController(vsync: this, duration: Duration(seconds: 3),);
_fadeInFadeOut = Tween<double>(begin: 0.0, end: 0.5).animate(animation);

animation.addStatusListener((status){
if(status == AnimationStatus.completed){
animation.reverse();
}
else if(status == AnimationStatus.dismissed){
animation.forward();
}
});
animation.forward();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: FadeTransition(
opacity: _fadeInFadeOut,
child: Container(
color: Colors.green,
width: 100,
height: 100,
),
),
),
),
);
}
}

关于Flutter FadeIn/FadeOut 动画在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com