Snap Matrix4 вращение до 90, 180, 270, 360 градусов, флаттер - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я использую пакет matrix_gesture_detector для масштабирования, преобразования и поворота виджета Transform.

Все работает хорошо, но для улучшения UX я бы хотел привязать виджет к На 90, 180, 270 или 360 градусов после того, как пользователь повернет виджет достаточно близко к указанным углам.

Редактировать: Чтобы уточнить, я бы хотел, чтобы пользователь мог свободно поворачивать виджет, но привязываться к ближайшим 90 вращение градусов в пределах того квадранта, в котором оно находится, когда оно подойдет достаточно близко. Следовательно, решение должно обнаружить эту «близость» и затем действовать соответственно. Пожалуйста, перейдите по этой ссылке, чтобы увидеть GIF, который показывает желаемый эффект

Как мне этого добиться?

Ниже приведен фрагмент кода

Widget transformContainer() {
Matrix4 matrix;
GlobalKey matrixDetectorKey = GlobalKey();

return MatrixGestureDetector(
  key: matrixDetectorKey,
  onMatrixUpdate: (m, tm, sm, rm) {
    setState(() {
      matrix = MatrixGestureDetector.compose(matrix, tm, sm, rm);
    });
  },
  child: Transform(
    transform: matrix,
    child: Container(
      padding: EdgeInsets.all(24.0),
      width: 100.0,
      height: 200.0,
      color: Colors.teal,
    ),
  ),
);}

1 Ответ

0 голосов
/ 27 февраля 2020
MatrixGestureDetector(
        onMatrixUpdate: (m, tm, sm, rm) {
          setState(() {
            //270 is the angle
            m.rotate(m.getTranslation(), 270);
            matrix4 = m;
          });
        },
        child: Transform(
          transform: matrix4,
          child: Container(
            padding: EdgeInsets.all(24.0),
            width: 100,
            height: 200,
            color: Colors.teal,
          ),
        ),
      ),
...