Me gustaría evitar que mi aplicación cambie su orientación y forzar el diseño para que se adhiera a "retrato".
En el main.dart, puse:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
pero cuando uso los botones de rotación del Simulador de Android, el diseño "sigue" la orientación del nuevo dispositivo ...
¿Cómo podría solucionar esto?
Gracias
'package:flutter/services.dart'
, entonces tal vez sea un error: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
devuelve de forma asincrónica, por lo que parece querunApp
debería incluirse en unthen
.Respuestas:
Importar
package:flutter/services.dart
, luegoPon
SystemChrome.setPreferredOrientations
elWidget build()
método por dentro .Ejemplo:
Actualizar
Es posible que esta solución no funcione para algunos dispositivos IOS como se menciona en la documentación actualizada de Flutter en octubre de 2019.
Aconsejan arreglar la orientación configurando UISupportedInterfaceOrientations en Info.plist de esta manera
Para obtener más información https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
fuente
@boeledi, si desea "bloquear" la orientación del dispositivo y no permitir que cambie cuando el usuario gira su teléfono, esto se configuró fácilmente como se muestra a continuación,
fuente
iOS:
Llamar
SystemChrome.setPreferredOrientations()
no funciona para mí, y tuve que cambiar elDevice Orientation
en el proyecto Xcode de la siguiente manera:Androide:
Establezca el
screenOrientation
atributo enportrait
para la actividad principal en el archivo de laandroid/app/src/main/AndroidManifest.xml
siguiente manera:fuente
screenOrientation
desde API nivel 8 para Android. @BloodLoss, creo que lo leíste en los documentos, pero sobreresizeableActivity
atributo. Vuelva a comprobar el enlace. ^^El método 'setPreferredOrientations' devuelve un objeto Future. Según la documentación, un futuro representa algún valor que estará disponible en algún lugar en el futuro. Es por eso que debe esperar hasta que esté disponible y luego continuar con la aplicación. Por lo tanto, se utilizará el método 'entonces', que, por definición, "registra las devoluciones de llamada que se llamarán cuando se complete el futuro". Por lo tanto, debe utilizar este código:
Además, se debe importar el siguiente archivo:
'paquete: flutter / services.dart'
fuente
Abra android / app / src / main / AndroidManifest.xml y agregue la siguiente línea en MainActivity:
Si tienes esto:
Deberías terminar con algo como esto:
Esto funciona para Android. En iOS, tendrá que cambiar esto desde la página de Xcode: https://i.stack.imgur.com/hswoe.png (como dijo Hejazi)
fuente
En primer lugar, importe esto en el archivo main.dart
Entonces no copie y pegue en lugar de ver (recordar) y escribir debajo del código en el archivo main.dart
Para forzar en modo retrato :
Para forzar en modo horizontal :
fuente
Coloque WidgetsFlutterBinding.ensureInitialized (); de lo contrario, obtendrá un error durante la construcción.
fuente
setPreferredOrientation
devuelve unFuture<void>
, por lo que es asincrónico. El enfoque más legible es definirmain
como asincrónico:fuente
await
es un patrón de programación ubicuo que está presente en múltiples lenguajes, y es muy claro qué expresivo.then
crea niveles de anidación. Si tiene tres o cuatro continuaciones,then
comienza a ser muy difícil de leer..then
se puede encadenar en lugar de anidar, como espera unFutureOr
. Esto me permite utilizar un enfoque más funcional, más legible y elegante. Por ejemplo, puedo usar el cuerpo de la expresión en lugar del cuerpo entre corchetes al encadenar los "luego".A partir de las nuevas versiones de flutter junto con la configuración
preferred Orientation
, necesitamos agregar una línea adicional, es decirEntonces, el código de trabajo para esto es:
fuente
A continuación se muestra el ejemplo oficial del equipo Flutter. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
fuente
Tratar
También puede cambiar la configuración de orientación de la pantalla en el manifiesto de Android y el archivo ios info.plist.
fuente
Importar importación 'paquete: flutter / services.dart';
Luego, incluye la línea de código a continuación en su archivo main.dart, y en su método principal así:
fuente
La mejor solución será usarlo en el método de compilación de MyApp ().
fuente