Je voudrais empêcher mon application de changer son orientation et forcer la mise en page à coller à "portrait".
Dans le main.dart, j'ai mis:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
mais lorsque j'utilise les boutons de rotation du simulateur Android, la disposition "suit" l'orientation du nouvel appareil ...
Comment pourrais-je résoudre ça?
Merci
'package:flutter/services.dart'
, alors peut-être que c'est un bug: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
renvoie de manière asynchrone, il semble donc querunApp
devrait être inclus dans un fichierthen
.Réponses:
Importez
package:flutter/services.dart
, puisMettez l'
SystemChrome.setPreferredOrientations
intérieur de laWidget build()
méthode.Exemple:
Mettre à jour
Cette solution peut ne pas fonctionner pour certains appareils IOS, comme mentionné dans la documentation mise à jour du flutter d'octobre 2019.
Ils conseillent de fixer l'orientation en définissant UISupportedInterfaceOrientations dans Info.plist comme ceci
Pour plus d'informations https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
la source
@boeledi, si vous souhaitez «verrouiller» l'orientation de l'appareil et ne pas l'autoriser à changer lorsque l'utilisateur fait pivoter son téléphone, cela a été facilement défini comme ci-dessous,
la source
iOS:
L'appel
SystemChrome.setPreferredOrientations()
ne fonctionne pas pour moi, et j'ai dû changer leDevice Orientation
dans le projet Xcode comme suit:Android:
Définissez l'
screenOrientation
attribut surportrait
pour l'activité principale du fichierandroid/app/src/main/AndroidManifest.xml
comme suit:la source
screenOrientation
depuis le niveau d'API 8 pour Android. @BloodLoss, je pense que vous l'avez lu sur la documentation, mais à propos de l'resizeableActivity
attribut. Vérifiez à nouveau le lien. ^^La méthode 'setPreferredOrientations' renvoie un objet Future. Par documentation, un Future représente une valeur qui sera disponible quelque part dans le futur. C'est pourquoi vous devez attendre qu'il soit disponible, puis passer à l'application. Par conséquent, il doit être utilisé la méthode «alors», qui, par définition, "enregistre les rappels à appeler lorsque le futur se termine". Par conséquent, vous utiliserez ce code:
De plus, le fichier suivant doit être importé:
'package: flutter / services.dart'
la source
Ouvrez android / app / src / main / AndroidManifest.xml et ajoutez la ligne suivante dans MainActivity:
Si vous avez ceci:
Vous devriez vous retrouver avec quelque chose comme ça:
Cela fonctionne pour Android. Sur iOS, vous devrez changer cela depuis la page Xcode: https://i.stack.imgur.com/hswoe.png (comme l'a dit Hejazi)
la source
Tout d'abord importez ceci dans le fichier main.dart
Ensuite , ne copiez pas collez plutôt voyez (rappelez-vous) et écrivez le code ci-dessous dans main.dart fichier
Pour forcer en mode portrait :
Pour forcer en mode paysage :
la source
Mettez WidgetsFlutterBinding.ensureInitialized () sinon vous obtiendrez une erreur lors de la construction.
la source
setPreferredOrientation
renvoie aFuture<void>
, donc il est asynchrone. L'approche la plus lisible consiste à définirmain
comme asynchrone:la source
await
est un modèle de programmation omniprésent qui est présent dans plusieurs langages, et ce qui est expressif est très clair.then
crée des niveaux d'imbrication. Si vous avez trois ou quatre suites, celathen
commence à devenir très difficile à lire..then
peut être enchaîné au lieu de s'emboîter, car il attend un fichierFutureOr
. Cela me permet d'utiliser une approche plus fonctionnelle, plus lisible et élégante. Par exemple, je peux utiliser le corps de l'expression au lieu du corps entre crochets en enchaînant les "thens".À partir des nouvelles versions de flutter avec le réglage du,
preferred Orientation
nous devons ajouter une ligne supplémentaire, c'est-à-direDonc, le code de travail pour cela est -
la source
Voici l'exemple officiel de l'équipe Flutter. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
la source
Essayer
Vous pouvez également modifier les paramètres d'orientation de l'écran dans le fichier manifeste android et ios info.plist.
la source
Importation import 'package: flutter / services.dart';
Ensuite, vous incluez la ligne de code ci-dessous dans votre fichier main.dart, et dans votre méthode principale comme ceci:
la source
La meilleure solution sera de l'utiliser dans la méthode de construction de MyApp ().
la source