Chciałbym uniemożliwić mojej aplikacji zmianę orientacji i zmusić układ do trzymania się „portretu”.
W main.dart umieściłem:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
ale kiedy używam przycisków obracania symulatora Androida, układ „podąża” za nową orientacją urządzenia ...
Jak mogłem to rozwiązać?
Dzięki
'package:flutter/services.dart'
, może to błąd: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
zwraca asynchronicznie, więc wydaje się, żerunApp
powinien być ujęty wthen
.Odpowiedzi:
Import
package:flutter/services.dart
, a następnieUmieść metodę
SystemChrome.setPreferredOrientations
wewnątrzWidget build()
.Przykład:
Aktualizacja
To rozwiązanie może nie działać w przypadku niektórych urządzeń z systemem IOS, jak wspomniano w zaktualizowanej dokumentacji fluttera z października 2019 r.
Zalecają ustalenie orientacji, ustawiając UISupportedInterfaceOrientations w Info.plist w ten sposób
Aby uzyskać więcej informacji, https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
źródło
@boeledi, Jeśli chcesz „zablokować” orientację urządzenia i nie pozwolić na jej zmianę, gdy użytkownik obraca telefon, można to łatwo ustawić jak poniżej,
źródło
iOS:
Wywołanie
SystemChrome.setPreferredOrientations()
nie działa dla mnie i musiałem zmienićDevice Orientation
w projekcie Xcode w następujący sposób:Android:
Ustaw
screenOrientation
atrybut naportrait
dla głównego działania w plikuandroid/app/src/main/AndroidManifest.xml
w następujący sposób:źródło
screenOrientation
od poziomu API 8 dla Androida. @BloodLoss, myślę, że przeczytałeś to w dokumentacji, ale oresizeableActivity
atrybucie. Sprawdź łącze ponownie. ^^Metoda „setPreferredOrientations” zwraca obiekt Future. Według dokumentacji przyszłość reprezentuje pewną wartość, która będzie dostępna gdzieś w przyszłości. Dlatego należy poczekać, aż będzie dostępny, a następnie przejść do aplikacji. W związku z tym powinna zostać użyta metoda „then”, która zgodnie z definicją „rejestruje wywołania zwrotne, które zostaną wywołane, gdy Future się zakończy”. Dlatego powinieneś użyć tego kodu:
Należy również zaimportować następujący plik:
„package: flutter / services.dart”
źródło
Otwórz android / app / src / main / AndroidManifest.xml i dodaj następujący wiersz w MainActivity:
Jeśli masz to:
Powinieneś otrzymać coś takiego:
Działa to na Androida. W iOS będziesz musiał to zmienić na stronie Xcode: https://i.stack.imgur.com/hswoe.png (jak powiedział Hejazi)
źródło
Przede wszystkim zaimportuj to do pliku main.dart
Następnie nie kopiuj wklejania, a zobacz (pamiętaj) i napisz poniższy kod w pliku main.dart
Aby wymusić tryb portretowy :
Aby wymusić w trybie poziomym :
źródło
Umieść WidgetsFlutterBinding.ensureInitialized (), w przeciwnym razie wystąpi błąd podczas budowania.
źródło
setPreferredOrientation
zwraca aFuture<void>
, więc jest asynchroniczna. Najbardziej czytelnym podejściem jest zdefiniowaniemain
jako asynchroniczne:źródło
await
to wszechobecny wzorzec programowania, który jest obecny w wielu językach i jest bardzo jasne, co jest ekspresyjne.then
tworzy poziomy zagnieżdżenia. Jeśli masz trzy lub cztery kontynuacje,then
czytanie zaczyna być bardzo trudne..then
można łączyć zamiast zagnieżdżać, ponieważ oczekuje, że plikFutureOr
. Dzięki temu mogę zastosować bardziej funkcjonalne podejście, które jest bardziej czytelne i eleganckie. Na przykład mogę użyć treści wyrażenia zamiast treści w nawiasach, łącząc „wtedy”.Od nowych wersji fluttera wraz z ustawieniem
preferred Orientation
musimy dodać jedną dodatkową linię tjTak więc działający kod to -
źródło
Poniżej znajduje się oficjalny przykład zespołu flutter. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
źródło
Próbować
Możesz także zmienić ustawienia orientacji ekranu w manifeście systemu Android i pliku info.plist systemu iOS.
źródło
Import import 'pakiet: flutter / services.dart';
Następnie umieść poniższy wiersz kodu w pliku main.dart oraz w swojej głównej metodzie, tak jak poniżej:
źródło
Najlepszym rozwiązaniem będzie użycie go w metodzie kompilacji MyApp ().
źródło