Ich möchte verhindern, dass meine Anwendung ihre Ausrichtung ändert, und das Layout zwingen, sich an "Hochformat" zu halten.
Im main.dart habe ich gesetzt:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
aber wenn ich die Android Simulator-Drehtasten benutze, "folgt" das Layout der neuen Geräteorientierung ...
Wie könnte ich das lösen?
Vielen Dank
'package:flutter/services.dart'
, dann ist es vielleicht ein Fehler: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
kehrt asynchron zurück, scheintrunApp
also in a eingeschlossen zu seinthen
.Antworten:
package:flutter/services.dart
Dann importierenLege das
SystemChrome.setPreferredOrientations
Innere derWidget build()
Methode ein.Beispiel:
Aktualisieren
Diese Lösung funktioniert möglicherweise nicht für einige IOS-Geräte, wie in der aktualisierten Flatterdokumentation vom Oktober 2019 erwähnt.
Sie empfehlen, die Ausrichtung zu korrigieren, indem Sie UISupportedInterfaceOrientations in Info.plist wie folgt festlegen
Weitere Informationen finden Sie unter https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
quelle
@boeledi, Wenn Sie die Ausrichtung des Geräts „sperren“ und nicht ändern möchten, während der Benutzer sein Telefon dreht, wurde dies wie folgt eingestellt:
quelle
iOS:
Das Anrufen
SystemChrome.setPreferredOrientations()
funktioniert bei mir nicht und ich musste dasDevice Orientation
im Xcode-Projekt wie folgt ändern :Android:
Setzen Sie das
screenOrientation
Attributportrait
für die Hauptaktivität in der Dateiandroid/app/src/main/AndroidManifest.xml
wie folgt:quelle
screenOrientation
seit API Level 8 für Android. @BloodLoss, ich denke du hast es in den Dokumenten gelesen, aber überresizeableActivity
Attribute. Überprüfen Sie den Link erneut. ^^Die Methode 'setPreferredOrientations' gibt ein Future-Objekt zurück. Pro Dokumentation stellt eine Zukunft einen Wert dar, der irgendwo in Zukunft verfügbar sein wird. Deshalb sollten Sie warten, bis es verfügbar ist, und dann mit der Anwendung fortfahren. Daher soll eine "dann" -Methode verwendet werden, die per Definition "Rückrufe registriert, die aufgerufen werden sollen, wenn die Zukunft abgeschlossen ist". Daher sollten Sie diesen Code verwenden:
Außerdem muss die folgende Datei importiert werden:
'package: flutter / services.dart'
quelle
Öffnen Sie android / app / src / main / AndroidManifest.xml und fügen Sie die folgende Zeile in die MainActivity ein:
Wenn Sie dies haben:
Sie sollten am Ende so etwas haben:
Dies funktioniert für Android. Unter iOS müssen Sie dies auf der Xcode-Seite ändern: https://i.stack.imgur.com/hswoe.png (wie Hejazi sagte)
quelle
Importieren Sie dies zunächst in die Datei main.dart
Dann kopieren Sie nicht Einfügen, sondern sehen (merken) und schreiben den folgenden Code in die Datei main.dart
So erzwingen Sie im Hochformat :
Um zu erzwingen , in Landschaftsmodus:
quelle
Geben Sie WidgetsFlutterBinding.ensureInitialized () ein, da sonst beim Erstellen eine Fehlermeldung angezeigt wird.
quelle
setPreferredOrientation
gibt a zurückFuture<void>
, ist also asynchron. Der am besten lesbare Ansatz besteht darin,main
asynchron zu definieren :quelle
await
ist ein allgegenwärtiges Programmiermuster, das in mehreren Sprachen vorhanden ist, und es ist sehr klar, was ausdrucksstark ist.then
erstellt Verschachtelungsebenen. Wenn Sie drei oder vier Fortsetzungen haben, wirdthen
es in der Tat sehr schwer zu lesen..then
kann verkettet werden, anstatt zu verschachteln, wie es a erwartetFutureOr
. Dies ermöglicht mir einen funktionaleren Ansatz, der lesbarer und eleganter ist. Zum Beispiel kann ich den Ausdruckskörper anstelle des in Klammern gesetzten Körpers verwenden, indem ich die "Thens" verkette.Ab neuen Flatterversionen
preferred Orientation
müssen wir zusammen mit der Einstellung eine zusätzliche Zeile hinzufügen, d. H.Der Arbeitscode dafür lautet also -
quelle
Versuchen
Sie können auch die Einstellungen für die Bildschirmausrichtung im Android-Manifest und in der Datei ios info.plist ändern.
quelle
Import import 'package: flutter / services.dart';
Dann fügen Sie die folgende Codezeile in Ihre main.dart-Datei und in Ihre Hauptmethode wie folgt ein:
quelle
Unten ist das offizielle Beispiel des Flatterteams. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
quelle
Die beste Lösung besteht darin, es in der Erstellungsmethode von MyApp () zu verwenden.
quelle