Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation FadeTransition()小部件在Flatter中仅设置一次动画? 类pin扩展StatefulWidget{ @凌驾 _PinState createState()=>\u PinState(); } 类_PinState使用TickerProviderStateMixin扩展状态{ 动画控制器_控制器; 动画(动画),; 布尔误差=假; @凌驾 void initState(){ super.initState(); 此.\u控制器=动画控制器( 持续时间:常量持续时间(毫秒:1000),vsync:this; 这是动画= 吐温(开始:0.0,结束:1.0)。动画(曲线动画)( 父节点:_控制器, 曲线:Curves.easeIn, )); } @凌驾 小部件构建(构建上下文){ if(此错误){ 这个错误=false; _controller.forward(); } 返回容器( 子级:if(this.error) 容器( 孩子:FadeTransition( 不透明度:_动画, 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 填充物( 填充:常数边集全部(8.0), 子项:Image.asset(“assets/images/sad_face.png”), ), ], ), ), ), ), } }_Animation_Flutter - Fatal编程技术网

Animation FadeTransition()小部件在Flatter中仅设置一次动画? 类pin扩展StatefulWidget{ @凌驾 _PinState createState()=>\u PinState(); } 类_PinState使用TickerProviderStateMixin扩展状态{ 动画控制器_控制器; 动画(动画),; 布尔误差=假; @凌驾 void initState(){ super.initState(); 此.\u控制器=动画控制器( 持续时间:常量持续时间(毫秒:1000),vsync:this; 这是动画= 吐温(开始:0.0,结束:1.0)。动画(曲线动画)( 父节点:_控制器, 曲线:Curves.easeIn, )); } @凌驾 小部件构建(构建上下文){ if(此错误){ 这个错误=false; _controller.forward(); } 返回容器( 子级:if(this.error) 容器( 孩子:FadeTransition( 不透明度:_动画, 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 填充物( 填充:常数边集全部(8.0), 子项:Image.asset(“assets/images/sad_face.png”), ), ], ), ), ), ), } }

Animation FadeTransition()小部件在Flatter中仅设置一次动画? 类pin扩展StatefulWidget{ @凌驾 _PinState createState()=>\u PinState(); } 类_PinState使用TickerProviderStateMixin扩展状态{ 动画控制器_控制器; 动画(动画),; 布尔误差=假; @凌驾 void initState(){ super.initState(); 此.\u控制器=动画控制器( 持续时间:常量持续时间(毫秒:1000),vsync:this; 这是动画= 吐温(开始:0.0,结束:1.0)。动画(曲线动画)( 父节点:_控制器, 曲线:Curves.easeIn, )); } @凌驾 小部件构建(构建上下文){ if(此错误){ 这个错误=false; _controller.forward(); } 返回容器( 子级:if(this.error) 容器( 孩子:FadeTransition( 不透明度:_动画, 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 填充物( 填充:常数边集全部(8.0), 子项:Image.asset(“assets/images/sad_face.png”), ), ], ), ), ), ), } },animation,flutter,Animation,Flutter,在上面的代码中,FadeTransition()小部件在应用程序首次启动时被设置动画。 FadeTransition()的可见性由error变量切换。 但是下次看到FadeTransition()小部件时,它是否未设置动画 当切换FadeTransition()时,小部件应该在每次出现时都设置动画 error变量是使用Providers从外部设置的,只要error发生更改,小部件就会重新生成,因此无需使用setState()我注意到的一件事是error总是错误的。没有代码将其转换为true,并且

在上面的代码中,
FadeTransition()
小部件在应用程序首次启动时被设置动画。
FadeTransition()
的可见性由
error
变量切换。 但是下次看到
FadeTransition()
小部件时,它是否未设置动画

当切换<代码>FadeTransition()时,小部件应该在每次出现时都设置动画


error
变量是使用
Providers
从外部设置的,只要
error
发生更改,小部件就会重新生成,因此无需使用
setState()
我注意到的一件事是
error
总是错误的。没有代码将其转换为true,并且有两个地方会将其设置为false。其中一个取决于它是否为真(因为
error=true
不存在,所以它永远不会为真)

也就是说,如果要使动画再次运行,无论何时切换此属性(通常在按钮的
onTap
方法中),都必须调用setState。 在设置状态中,您可以使用

class pin extends StatefulWidget {
@override
_PinState createState() => _PinState();
}

class _PinState extends State<pin> with TickerProviderStateMixin {
AnimationController _controller;
Animation<double> _animation;
bool error = false;


@override
void initState() {
  super.initState();
  this._controller = AnimationController(
      duration: const Duration(milliseconds: 1000), vsync: this);
  this._animation =
      Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
    parent: _controller,
    curve: Curves.easeIn,
  ));
}

@override
Widget build(BuildContext context) {
  if(this.error) {
    this.error = false;
    _controller.forward();
  }
  return Container(
    child: if (this.error)
            Container(
            child: FadeTransition(
              opacity: _animation,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Image.asset("assets/images/sad_face.png"),
                  ),
                ],
              ),
            ),
          ),    
  ),
}
}

使用
controller.forward(from:0)时,问题得到解决
但是我想知道其他动画没有在
控制器中使用
中的
也能正常工作,为什么?
controller.forward(from: 0);
// or
controller.reset(); // stops the animation if in progress
controller.forward();