[Flutter] Forcer l'orientation de l'écran utilisateur

Publié le 08 Oct 2021

Lors du développement d'une application, nous avons parfois besoin de forcer l'orientation de l'écran en portrait ou paysage afin que l'utilisateur ait une expérience enrichie. 

Pour cela, il existe une méthode simple qui permet d'initialiser l'orientation de l'écran et de pouvoir la changer si vous le souhaiter pour une vue particulière

Initialiser l'orientation de l'écran

Placez-vous dans votre fichier main.dart là où vous initialisez votre projet. 

Lors de l'initialisation, définissez simplement l'orientation de votre écran souhaitée lors du lancement de la function runApp.

Par exemple :  


        Future<void> main() async {
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_) {
    runApp(MyApp());
  });
}

class MyApp extends StatelessWidget {
...
}
    

Dans ce cas, l'utilisateur aura son écran bloqué en mode portrait et ce, même si il passe sont écran en mode paysage.

Vous pouvez cumuler les paramètres avec, par exemple, le mode portrait et landscape


        Future<void> main() async { 
    SystemChrome.setPreferredOrientations(
        [
            DeviceOrientation.portraitUp, 
            DeviceOrientation.landscapeLeft
        ]).then((_) { 
        runApp(MyApp());
    });
}
class MyApp extends StatelessWidget {
...
}
    

4 paramètres sont disponibles :


        DeviceOrientation.portraitUp > Mode portrait normal
DeviceOrientation.portraitDown > Mode portrait avec téléphone retourné
DeviceOrientation.landscapeLeft > Paysage en tournant son écran à 90° à gauche
DeviceOrientation.landscapeRight > Paysage en tournant son écran à 90° à droite
    

Je souhaite modifier l'orientation pour un écran spécifique

Cela se passe l' initState d'un StatefulWidget.

En effet, il suffit de faire la déclaration comme suit par exemple et ne pas oublier de réinitialiser l'état en quittant cet écran dans le dispose.

Dans notre exemple ci-dessous, on autorise le mode portrait et le mode paysage à gauche et à droite :


        @override
void initState() {
    super.initState();

    SystemChrome.setPreferredOrientations([
        DeviceOrientation.portraitUp,
        DeviceOrientation.landscapeRight,
        DeviceOrientation.landscapeLeft
    ]);
}

@override
void dispose() {
    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
    super.dispose();
}