Как мне вращать что-то на 15 градусов в Flutter?

В документах Flutter показан пример поворота "div" на 15 градусов, как для HTML/CSS, так и для кода Flutter:

Код флаттера:

var container = new Container( // gray box
  child: new Center(
    child:  new Transform(
      child:  new Text(
        "Lorem ipsum",
      ),
      alignment: FractionalOffset.center,
      transform: new Matrix4.identity()
        ..rotateZ(15 * 3.1415927 / 180),
    ), 
  ),
);

И соответствующие части являются new Transform и alignment: FractionalOffset.center и transform: new Matrix4.identity()..rotateZ(15 * 3.1415927/180)

Мне любопытно, есть ли более простой способ повернуть Container в Flutter? Есть ли короткая рука для случая "15 градусов"?

Благодарю!

Ответ 1

В мобильных приложениях, я думаю, что это редкость, чтобы начать вещание с поворотом на 15 градусов и просто оставаться там навсегда. Поэтому возможно, что поддержка Flutter для вращения лучше, если вы планируете корректировать вращение с течением времени.

Это похоже на перебор, но RotationTransition с AlwaysStoppedAnimation выполнит именно то, что вы хотите.

screenshot

new RotationTransition(
  turns: new AlwaysStoppedAnimation(15 / 360),
  child: new Text("Lorem ipsum"),
)

Если вы хотите повернуть что-то на 90, 180 или 270 градусов, вы можете использовать RotatedBox.

screenshot

new RotatedBox(
  quarterTurns: 1,
  child: new Text("Lorem ipsum")
)

Ответ 2

Вы можете использовать Transform.rotate для поворота вашего виджета. Я использовал Text и повернул его на 45˚ (π/4)

Пример:

Widget build(BuildContext context) {
  return Transform.rotate(angle: - math.pi / 4, child: Text("Text"),);
}

enter image description here

Ответ 3

enter image description here

Если вы работаете с холстом (как в виджете CustomPaint), вы можете повернуть его на 15 градусов следующим образом:

import 'dart:math' as math;

class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {

    canvas.save();

    // rotate the canvas by 15 degrees
    final degrees = 15;
    final radians = degrees * math.pi / 180;
    canvas.rotate(radians);

    // draw the text
    final textStyle = TextStyle(color: Colors.black, fontSize: 30);
    final textSpan = TextSpan(text: 'Hello, world.', style: textStyle);
    final textPainter = TextPainter(text: textSpan, textDirection: TextDirection.ltr);
    textPainter.layout(minWidth: 0, maxWidth: size.width);
    textPainter.paint(canvas, Offset(0, 0));

    canvas.restore();
  }

  @override
  bool shouldRepaint(CustomPainter old) {
    return false;
  }
}

Однако, если вы делаете что-то простое, то я бы использовал RotatedBox или Transform.rotate как предложено в других ответах.