Как продолжить преобразование / вращение? - Дарт / Флаттер - PullRequest
0 голосов
/ 08 января 2019

У меня были некоторые проблемы с использованием Transform.Rotate в dart / Flutter. Я настроил свой код так, чтобы я мог поворачивать изображение жестами. Однако, как только я повернул изображение один раз, отпустил и продолжил вращение, изображение вернулось в исходное положение.

Это та же самая проблема, показанная здесь: Жест вращения вызывает нежелательное вращение

Решение здесь - сохранить преобразование в переменной. Есть ли способ сохранить преобразование в переменной в Dart / Flutter?

Также идеальной ситуацией было бы то, что я могу немного оживить вращение, поэтому оно немного задерживается, потому что сейчас оно сразу реагирует на вращение. Если эта часть неясна, пожалуйста, дайте мне знать !!

Любые предложения приветствуются !!!

1 Ответ

0 голосов
/ 08 января 2019

Вы в основном хотите сохранить состояние виджета, поэтому я думаю, что вам нужно будет обернуть его в StatefulWidget, чтобы иметь возможность сделать это. (https://www.youtube.com/watch?v=AqCMFXEmf3w)

Чтобы сгладить анимацию, вы можете попробовать использовать AnimatedContainer? Я не использовал это сам, но я думаю, что это должно быть то, что вам нужно! (https://www.youtube.com/watch?v=yI-8QHpGIP4)

EDIT

Хорошо, у меня это работает для вас.

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 ===================================');
  }
...