如何继续变换/旋转? -飞镖/颤振

时间:2019-01-08 18:38:02

标签: android ios dart drag-and-drop flutter

在dart / Flutter中使用Transform.Rotate时遇到了一些问题。 我已经设置好代码,以便可以通过手势旋转图像。但是,一旦我旋转图像一次并放开并继续旋转,图像就会重置回其原始位置。

这里显示的是同一问题:Rotation gesture produces undesired rotation

这里的解决方案是将转换保存在变量中。有什么方法可以将转换保存到Dart / Flutter中的变量中?

同样理想的情况是我可以对旋转进行一些动画处理,因此略微延迟,因为现在它可以立即对旋转做出响应。如果这部分不清楚,请让我知道!

欢迎提出任何建议!!!

编辑:

此处的代码= https://github.com/RobinFarmer/rotation

我已将我的完整代码添加到Github中,我能够旋转Box One中的文本,放开该框时它确实会停留在该位置,但是当我想要继续拖动时,它将重置它。这与在新的旋转上总是保持0的δ角有关,但是我不确定如何使它继续先前的旋转。

我希望这是有道理的。

期待答复。

1 个答案:

答案 0 :(得分:0)

您基本上想保存小部件的状态,所以我认为您需要将其包装在StatefulWidget中才能执行此操作。 (https://www.youtube.com/watch?v=AqCMFXEmf3w

要使动画平滑,您可以尝试使用AnimatedContainer吗? 我自己没有使用过,但我认为它应该是您所需要的! (https://www.youtube.com/watch?v=yI-8QHpGIP4

编辑

好的,我为您服务。

Offset vector;
  double startingAngle;
  double deltaAngle = 0.0;
  double finalAngle = 0.0;
  // store the final angle of the object
  double finalObjectAngle = 0.0;


  void _onPanStart(DragStartDetails details) {
    _polarCoordFromGlobalOffset(details.globalPosition);
    startingAngle = vector.direction;
    print('START = $startingAngle ===================================');
  }

  void _onPanUpdate(DragUpdateDetails details) {
    _polarCoordFromGlobalOffset(details.globalPosition);

    setState(() {
      // HERE you should use the finalObjectAngle
      deltaAngle = vector.direction - startingAngle + finalObjectAngle;
      finalAngle = deltaAngle;
    });
  }

  void _onPanEnd(DragEndDetails details) {
    finalAngle = deltaAngle;
    // Save the finalAngle of the object
    finalObjectAngle = finalAngle;
    print('End = $finalAngle ===================================');
  }