Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 如何防止处理StatefulWidget?_Flutter - Fatal编程技术网

Flutter 如何防止处理StatefulWidget?

Flutter 如何防止处理StatefulWidget?,flutter,Flutter,在树构建逻辑中添加条件结构会导致挂载/卸载小部件。这反过来又会导致恼人的动画问题,如果小部件是动画与控制器内 您如何告诉flatter防止处理小部件状态,并在树的另一部分中搜索它 build(BuildContext){ var值=controller.value; ///让我们避免在高不透明度下闪烁,同时节省CPU ///注释这一行将产生平滑动画 ///当它未注释时,flatter将处理先前位于Opacity()小部件下的状态 如果(值>=0.95)返回MyAnimatedWidget();

在树构建逻辑中添加条件结构会导致挂载/卸载小部件。这反过来又会导致恼人的动画问题,如果小部件是动画与控制器内

您如何告诉flatter防止处理小部件状态,并在树的另一部分中搜索它

build(BuildContext){
var值=controller.value;
///让我们避免在高不透明度下闪烁,同时节省CPU
///注释这一行将产生平滑动画
///当它未注释时,flatter将处理先前位于Opacity()小部件下的状态
如果(值>=0.95)返回MyAnimatedWidget();
返回不透明度(
不透明度:值,
子:MyAnimatedWidget();
);
}

当您在代码中编写
MyAnimatedWidget()
时,这意味着您再次启动widget的新实例,这就是为什么旧实例会被丢弃,因为它不再使用了

您可以在类中创建一个类型为
MyAnimatedWidget()
的字段,并返回不透明度。因此,我将只是您的小部件的一个实例,我不会放弃

MyAnimatedWidget animatedWidget = MyAnimatedWidget();

build(BuildContext context) {
  var value = controller.value;

  /// Let's avoid blinking at high opacity, save CPU at the same time

  /// commenting this line will result in smooth animation
  /// when it is uncommented, Flutter will dispose the State which was previously lying under Opacity() widget  
  if(value >= 0.95) return animatedWidget ;

  return Opacity(
   opacity: value,
   child: animatedWidget ;
  );
}

尝试了
automatickepaliveclientmixin
?它似乎解决了一个更困难的任务-保持活动小部件,它不再在树中。在这里,小部件停留在另一个节点下的树中。看起来也像是一个复杂的overkillis
状态。将自定义的
状态
与之混合时调用dispose
。@pskink
状态。当不透明度达到0.95时,为
MyAnimatedWidget
调用disposed
。框架不再在以前的位置看到它,因此它创建了一个新的
状态
,没有
不透明度
作为父级。在我的测试中,我有一个从0到1到0等的不透明度反弹,所以当不透明度在值1.0左右时,动画会不断重置。不幸的是,这将导致
MyAnimatedWidget处置后的
失效状态。我们现在唯一的工作方式就是避免使用有状态的小部件。引入自定义股票代码工厂,然后将
控制器
作为参数传递给
无状态小部件
,以便在
动画构建器
中使用。让父窗口小部件负责处理所有内容