Je utiliserai un simple mixin pour verrouiller le téléphone en mode portrait. La solution suivante verrouille l'application entière en mode portrait ou définit des écrans spécifiques en mode portrait tout en permettant la rotation ailleurs.
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
/// Force le mode portrait uniquement dans toute l'application
/// Utilisez ce Mixin sur le widget d'application principal, par exemple app.dart
/// L''App' de Flutter doit étendre le Stateless widget.
///
/// Appelez `super.build(context)` dans la méthode build() principale
/// pour activer le mode portrait uniquement
mixin PortraitModeMixin on StatelessWidget {
@override
Widget build(BuildContext context) {
_portraitModeOnly();
return null;
}
}
/// Force le mode portrait uniquement sur un écran spécifique
/// Utilisez ce Mixin sur l'écran spécifique que vous souhaitez
/// bloquer en mode portrait uniquement.
///
/// Appelez `super.build(context)` dans la méthode build() de l'état
/// et `super.dispose();` dans la méthode dispose() de l'état
mixin PortraitStatefulModeMixin on State {
@override
Widget build(BuildContext context) {
_portraitModeOnly();
return null;
}
@override
void dispose() {
_enableRotation();
}
}
/// bloque la rotation; défini l'orientation en : portrait
void _portraitModeOnly() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
void _enableRotation() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
}
Pour bloquer la rotation dans toute l'application, implémentez PortraitModeMixin
dans le widget App
principal. N'oubliez pas d'appeler super.build(context)
dans la méthode build(BuildContext context)
.
/// Widget App principal
class App extends StatelessWidget with PortraitModeMixin {
const App();
@override
Widget build(BuildContext context) {
super.build(context);
return CupertinoApp(
title: 'Flutter Demo',
theme: CupertinoThemeData(),
home: Text("Exemple de blocage de rotation d'écran"),
);
}
}
Pour bloquer la rotation dans un écran spécifique, implémentez PortraitStatefulModeMixin
dans l'état de l'écran spécifique. N'oubliez pas d'appeler super.build(context)
dans la méthode build()
de l'état et super.dispose()
dans la méthode dispose()
. Si votre écran est un StatelessWidget - répétez simplement la solution de l'App (exemple précédent) c'est-à-dire utilisez PortraitModeMixin
.
/// Écran spécifique
class SampleScreen extends StatefulWidget {
SampleScreen() : super();
@override
State createState() => _SampleScreenState();
}
class _SampleScreenState extends State
with PortraitStatefulModeMixin {
@override
Widget build(BuildContext context) {
super.build(context);
return Text("Flutter - Exemple de blocage de rotation d'écran");
}
@override
void dispose() {
super.dispose();
}
}
Les mixins avec une telle syntaxe fonctionnent à partir de Dart 2.1