Tourner un Container dans Flutter avec le widget Transform


Avatar de Pierre Courtois

Les widgets de Flutter ne disposent pas d’une propriété permettant de les tourner. Toutefois, je vous explique comment régler ce problème, grâce au widget Transform.


Tourner un widget dans Flutter

Comment tourner un Container dans Flutter avec Transform

Le widget Container ne propose pas de propriété pour directement gérer une rotation, mais il est possible d’utiliser le widget Transform.rotate dans ce but. Ce widget permet de tourner un enfant (par exemple un Container) en fonction d’un angle donné en radians.

Voici un exemple de code permettant de faire tourner un Container avec le widget Transform, avec un Slider :

import 'package:flutter/material.dart';
import 'dart:math';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  double _rotate = 0.0; // Valeur du Slider
  double _angle = 0.0; // Angle en radians

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Rotation d’un Container')),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Transform.rotate(
              angle: _angle,
              child: Container(
                width: 100,
                height: 100,
                color: Colors.blue,
              ),
            ),
            SizedBox(height: 20),
            Slider(
              value: _rotate,
              min: 0,
              max: 360,
              onChanged: (double newValue) {
                setState(() {
                  _rotate = newValue;
                  _angle = (_rotate * pi) / 180; // Conversion en radians pour l'utiliser dans le widget Transform
                });
              },
            ),
            Text('Rotation: ${_rotate.toStringAsFixed(0)}°')
          ],
        ),
      ),
    );
  }
}

Explication :

  • Transform.rotate(angle: _angle, child: ...) : applique une rotation en radians.
  • Slider : permet à l’utilisateur de modifier l’angle de rotation de 0° à 360°.
  • Conversion degrés → radians : _angle = (_rotate * pi) / 180;

Valeurs utiles de rotation

Pour travailler avec des angles, le mieux est de convertir vos degrés en radian. Voici quelques valeurs courantes :

DegrésRadians (π)Radians (valeur numérique)
00.0
90°π/21.5708
180°π3.1416
270°3π/24.7124
360°6.2832

Par exemple, voilà un Container tourné à 90° :

Transform.rotate(
  angle: pi / 2, // 90°
  child: Container(
    width: 100,
    height: 100,
    color: Colors.red,
  ),
)
Avatar de Pierre Courtois