Я устанавливаю экран главного меню с книжной ориентацией, который затем переходит ко второму экрану, который должен быть альбомной ориентации.
Такое ощущение, что эти две настройки борются друг с другом, и как только я установил настройку ландшафта, приложение переходит от мгновенных ответов к 2 секундам или отставанию экрана для переключения экранов.
Фрагменты кода:
class MainMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);
Так я устанавливаю свою первоначальную ориентацию.
Перейдите к следующему экрану, например, с помощью нажатия кнопки:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,]);
Моя ориентация для второго экрана. Если я удаляю строки SystemChrome, это отзывчиво. Если я добавлю их обратно, это сильно отстает.
Есть ли другой метод, который я должен использовать для вспомогательных экранов?
Спасибо, ребята.
Edit:
Попытка реализовать теоретическое решение от Пита ниже, который бросает груды:
Another exception was thrown: inheritFromWidgetOfExactType(_InheritedTheme) or inheritFromElement() was called after dispose():
ошибки в консоли (но приложение не падает, я просто вижу долю секунды аварийного дампа, когда экраны перемещаются назад и вперед). Используемый код:
class MainMenu extends StatefulWidget {
@override
_MainMenuParentState createState() => _MainMenuParentState();
}
class _MainMenuParentState extends State<MainMenu> {
@override
void initState() {
super.initState();
SystemChrome.setEnabledSystemUIOverlays([]);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);
}
@override
void dispose(){
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
super.dispose();
}
Я пытался в initState также использовать Future, но ошибки каждый раз идентичны.
Утилизация вызывается в onPress:
onPressed: () {
dispose();
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
И я делаю то же самое в другом случае, я преобразовал SecondScreen в виджет с состоянием, использовал initstate для установки в качестве ландшафта и вызвал dispose точно так же.