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
Flutter 在提供程序状态更新时重置颤振动画值_Flutter_Animation_Provider_Vsync - Fatal编程技术网

Flutter 在提供程序状态更新时重置颤振动画值

Flutter 在提供程序状态更新时重置颤振动画值,flutter,animation,provider,vsync,Flutter,Animation,Provider,Vsync,我正在制作一个stepper小部件,我已经能够制作它的所有部分,但是我计划在动画运行后从我的提供程序更新一个状态值,这是不可能的,因为每当我更新我的提供程序状态时,initState方法就会运行,这反过来会重置我的动画 这是我的initState()方法的内容: @override initState() { print("REINIT STATE****"); controller = AnimationController(

我正在制作一个stepper小部件,我已经能够制作它的所有部分,但是我计划在动画运行后从我的提供程序更新一个状态值,这是不可能的,因为每当我更新我的提供程序状态时,
initState
方法就会运行,这反过来会重置我的动画

这是我的
initState()
方法的内容:

  @override
  initState() {
      print("REINIT STATE****");
      controller = AnimationController(
        vsync: this,
        duration: Duration(milliseconds: 3000),
      );
  }
这就是我开始动画的方式

void startAnimation() {
    Animation<double> animation = Tween<double>(
            begin: getTweenBegin(step + 1), end: getTweenEnd(step + 1))
        .animate(controller);
    print(animation.value);
    controller.addListener(() {
      setState(() {
        animationValue = animation.value;
      });
      if (animation.status == AnimationStatus.completed) {
        Provider.of<LanguageProvider>(context, listen: false).localeValue =
            Locale("fr");
      }
    });
    controller.forward();
  }
void startAnimation(){
动画=吐温(
开始:getTweenBegin(步骤+1),结束:getTweenEnd(步骤+1))
.制作动画(控制器);
打印(动画.值);
controller.addListener(){
设置状态(){
animationValue=animation.value;
});
如果(animation.status==AnimationStatus.completed){
Provider.of(context,listen:false).localeValue=
地点(“fr”);
}
});
controller.forward();
}
一切正常,但每当AnimationStatus完成并且我尝试更新提供程序状态时,
animation.value
值返回初始值,我可以看到再次调用
initState

如果从提供者的setter中删除对
notifyListeners()
的调用,则动画值不会重置,但需要更新新值


在提供程序状态更新后,我如何保留此值?

小部件会重新加载,因为它有一个侦听LanguageProvider值的父项。您在构建方法中的事件侦听器上调用
startAnimation()
?@GazihanAlankus该事件侦听器可能再次被调用?