Gostaria de evitar que meu aplicativo altere sua orientação e forçar o layout a ficar em "retrato".
No main.dart, coloco:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
mas quando uso os botões de rotação do Android Simulator, o layout "segue" a nova orientação do dispositivo ...
Como eu poderia resolver isso?
obrigado
'package:flutter/services.dart'
, talvez seja um bug: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
retorna de forma assíncrona, então parece querunApp
deve estar entre umthen
.Respostas:
Importar
package:flutter/services.dart
entãoColoque
SystemChrome.setPreferredOrientations
dentro doWidget build()
método.Exemplo:
Atualizar
Esta solução pode não funcionar para alguns dispositivos IOS, conforme mencionado na documentação atualizada do flutter em outubro de 2019.
Eles aconselham corrigir a orientação definindo UISupportedInterfaceOrientations em Info.plist como este
Para mais informações https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
fonte
@boeledi, se você deseja “bloquear” a orientação do dispositivo e não permitir que ela mude conforme o usuário gira o telefone, isso foi facilmente definido como abaixo,
fonte
iOS:
Chamar
SystemChrome.setPreferredOrientations()
não funciona para mim e tive que alterar oDevice Orientation
no projeto Xcode da seguinte forma:Android:
Defina o
screenOrientation
atributo paraportrait
para a atividade principal no arquivo daandroid/app/src/main/AndroidManifest.xml
seguinte forma:fonte
screenOrientation
desde a API nível 8 para Android. @BloodLoss, acho que você leu na documentação, mas sobre oresizeableActivity
atributo. Verifique o link novamente. ^^O método 'setPreferredOrientations' retorna um objeto Future. Por documentação, um Futuro representa algum valor que estará disponível em algum lugar no futuro. É por isso que você deve esperar até que esteja disponível e então prosseguir com o aplicativo. Portanto, deve ser utilizado o método 'then', que, por definição, "registra callbacks a serem chamados quando o Future for concluído". Portanto, você deve usar este código:
Além disso, o seguinte arquivo deve ser importado:
'pacote: flutter / services.dart'
fonte
Abra android / app / src / main / AndroidManifest.xml e adicione a seguinte linha em MainActivity:
Se você tem este:
Você deve acabar com algo assim:
Isso funciona para Android. No iOS, você terá que alterar isso na página do Xcode: https://i.stack.imgur.com/hswoe.png (como Hejazi disse)
fonte
Em primeiro lugar, importe isso no arquivo main.dart
Então não copie e cole, em vez de ver (lembrar) e escrever o código abaixo no arquivo main.dart
Para forçar no modo retrato :
Para forçar no modo paisagem :
fonte
Coloque o WidgetsFlutterBinding.ensureInitialized () do contrário, você obterá um erro durante a construção.
fonte
setPreferredOrientation
retorna aFuture<void>
, por isso é assíncrono. A abordagem mais legível é definirmain
como assíncrono:fonte
await
é um padrão de programação onipresente que está presente em várias linguagens, e é muito claro o que é expressivo.then
cria níveis de aninhamento. Se você tem três ou quatro continuações,then
começa a ficar realmente muito difícil de ler..then
pode ser encadeado em vez de aninhado, pois espera aFutureOr
. Isso me permite usar uma abordagem mais funcional, que é mais legível e elegante. Por exemplo, posso usar o corpo da expressão em vez do corpo entre colchetes, encadeando o "então".A partir de novas versões de flutter, juntamente com a configuração
preferred Orientation
, precisamos adicionar uma linha extra, ou seja,Portanto, o código de trabalho para isso é -
fonte
Abaixo está o exemplo oficial da equipe de flutter. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
fonte
Experimentar
Você também pode alterar as configurações de orientação da tela no manifesto do Android e no arquivo ios info.plist.
fonte
Import import 'package: flutter / services.dart';
Em seguida, você inclui a linha de código abaixo em seu arquivo main.dart e em seu método principal da seguinte forma:
fonte
A melhor solução será usá-lo no método de construção de MyApp ().
fonte