【问题标题】:Having Multiple SetStates() in a Gesture Detector?在手势检测器中有多个 SetStates()?
【发布时间】:2019-01-08 12:08:17
【问题描述】:

我无法通过 onTap VoidCallback 在多个区域更改设置状态?

我在不同的有状态小部件中有两个 AnimationController。我想要实现的是,如果 controller1.value == 0.0 那么它将确保当 onTap 时 controller2.value == 1.0 反之亦然,如果 controller1.value == 1.0。

StatefulWidget 底层(将 widget.onTapOpen/close 传递给顶层)

onTap: () {
  _toggleExpandingSheetPanelVisibility();
  setState(() {
    if (_controller1.value == 0.0){
      widget.onTapOpen();
    }
    else if (_controller1.value == 1.0){
      widget.onTapClosed();
    }
  });
 },

StatefulWidget 顶层

onTapOpen: _ensureVisible,
onTapClosed: _ensureInvisible,

 void _ensureVisible() {
 setState(() {
   if (_controller2.value == 0.0) {
     _toggleVisibility();
   }
 });
}

void _ensureInvisible() {
 setState(() {
   if (_controller2.value == 1.0) {
     _toggleVisibility();
   }
 });
}

【问题讨论】:

  • 如果不更改状态,则无需将onTap 中的代码包装在setState(...) 中。您已经在 _ensureVisible()_ensureInvisible() 中拥有 setState(...),您可以在其中实际更改状态。实际上,您可能只需要在_toggleVisibility() 中使用它,但该代码不在您的问题中。添加 tat 是个好主意。请在您的代码中添加类声明部分,以便更清楚哪些小部件包含哪些代码。
  • 我像你提到的那样摆脱了 setState(..) 并包含 > 0.5 而不是 == 1.0 并且它有效...忘记了 > 1 的动画控制器的值!感谢您的帮助!

标签: dart flutter setstate gesturedetector


【解决方案1】:

if (_controller2.value >< 0.5) 工作时它会切换可见性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多