我设置一个主菜单屏幕纵向放置,然后导航到一个需要是横向的第二屏幕。
这感觉就像这两种设置都互相打架,只要我设置了景观设置应用程序从瞬时响应去到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线是响应。如果我早在添加它们,过度滞后。
是否有不同的方法,我应该使用的子屏?
多谢你们。
编辑:
试图实现从皮特以下,这将引发成堆的理论为基础的解决方案:
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试图用未来为好,但每一次错误都完全相同。
调用Dispose在onPress:
onPressed: () {
dispose();
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
和我一模一样的另一种方式做,我已经转换SecondScreen到statefulwidget,使用INITSTATE设置景观,并呼吁处置方式完全相同。
不要把SystemChrome
方法内部build()
的任何电话。让你的屏幕来自StatefulWidget
延伸。触发器内SystemChrome
的initState()
通话用Future
。