Я бы хотел, чтобы мое приложение не меняло ориентацию и заставляло макет придерживаться «портретной» ориентации.
В main.dart я положил:
void main(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(new MyApp());
}
но когда я использую кнопки поворота Android Simulator, макет "следует" за новой ориентацией устройства ...
Как я мог это решить?
Спасибо
'package:flutter/services.dart'
, то, возможно, это ошибка: github.com/flutter/flutter/issues/13238SystemChrome.setPreferredOrientations
возвращается асинхронно, поэтому кажется, что егоrunApp
следует заключить вthen
.Ответы:
Импортировать
package:flutter/services.dart
, затемПоместите метод
SystemChrome.setPreferredOrientations
внутрьWidget build()
.Пример:
Обновить
Это решение может не работать для некоторых устройств IOS, как упоминалось в обновленной документации по флаттеру от октября 2019 года.
Они советуют зафиксировать ориентацию, установив UISupportedInterfaceOrientations в Info.plist следующим образом
Для получения дополнительной информации https://github.com/flutter/flutter/issues/27235#issuecomment-508995063
источник
@boeledi, если вы хотите «заблокировать» ориентацию устройства и не позволять ей изменяться, когда пользователь поворачивает свой телефон, это можно легко установить, как показано ниже,
источник
iOS:
Звонки
SystemChrome.setPreferredOrientations()
у меня не работают, и мне пришлось изменитьDevice Orientation
в проекте Xcode следующее:Android:
Установите
screenOrientation
атрибутportrait
для основного действия в файлеandroid/app/src/main/AndroidManifest.xml
следующим образом:источник
screenOrientation
с уровня API 8 для Android. @BloodLoss, я думаю, вы читали это в документации, но обresizeableActivity
атрибуте. Проверьте ссылку еще раз. ^^Метод setPreferredOrientations возвращает объект Future. Согласно документации, будущее представляет собой некоторую ценность, которая будет доступна где-то в будущем. Вот почему вы должны дождаться, пока он станет доступен, а затем продолжить работу с приложением. Следовательно, должен использоваться метод 'then', который, по определению, «регистрирует обратные вызовы, которые будут вызываться по завершении Future». Следовательно, вы должны использовать этот код:
Также необходимо импортировать следующий файл:
'пакет: flutter / services.dart'
источник
Откройте android / app / src / main / AndroidManifest.xml и добавьте следующую строку в MainActivity:
Если у вас есть это:
У вас должно получиться что-то вроде этого:
Это работает на Android. В iOS вам нужно будет изменить это на странице Xcode: https://i.stack.imgur.com/hswoe.png (как сказал Хиджази)
источник
Прежде всего, импортируйте это в файл main.dart
Тогда не копируйте вставку, а посмотрите (запомните) и напишите ниже код в файле main.dart
Чтобы заставить в портретном режиме:
Чтобы заставить работать в ландшафтном режиме:
источник
Поместите WidgetsFlutterBinding.ensureInitialized (), иначе вы получите ошибку при сборке.
источник
setPreferredOrientation
возвращаетFuture<void>
, поэтому он является асинхронным. Самый читаемый подход - определитьmain
как асинхронный:источник
await
- это повсеместный шаблон программирования, который присутствует на нескольких языках, и очень ясно, что выразительно.then
создает уровни вложенности. Если у вас есть три или четыре продолжения,then
становится действительно очень трудно читать..then
можно связать вместо вложенности, как ожидаетсяFutureOr
. Это позволяет мне использовать более функциональный подход, более читаемый и элегантный. Например, я могу использовать тело выражения вместо тела в квадратных скобках, связав «thens».Просто добавьте следующую строку кода в файл main.dart.
и не забудьте импортировать файл services.dart. Пример приведен ниже!
источник
Ниже приведен официальный пример команды flutter. https://github.com/flutter/samples/blob/master/veggieseasons/lib/main.dart
источник
Что касается новых версий флаттера, вместе с настройкой
preferred Orientation
нам нужно добавить одну дополнительную строку, т.е.Итак, рабочий код для этого -
источник
Импортировать import 'package: flutter / services.dart';
Затем вы включаете строку кода ниже в свой файл main.dart и в свой основной метод следующим образом:
источник
Пытаться
Вы также можете изменить настройки ориентации экрана в манифесте Android и файле ios info.plist.
источник
Лучшим решением будет использовать его в методе сборки MyApp ().
источник