【问题标题】:Lock landscape, enable only on specific views锁定横向,仅在特定视图上启用
【发布时间】:2022-01-16 19:43:16
【问题描述】:

我想在我的应用程序中强制使用纵向模式,我正在使用以下设置。但是我有一个观点,我必须启用横向,有没有办法让它只适用于除我想要的特定视图之外的所有视图?我不想将它粘贴到整个应用程序的每个小部件中。

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);

在我想要横向的视图上,我有一个 if 来检查视图是横向还是纵向,但它不会通过上述设置呈现为横向。

【问题讨论】:

  • 你试过this吗?

标签: flutter


【解决方案1】:

假设您的应用完全处于“纵向”模式。你所拥有的将起作用。现在,您希望特定屏幕是纵向/横向或仅横向。然后你可以为那个屏幕单独配置(比如 Screen2)。

您在 Screen1 中并想要转到 Screen2(应该是横向的)。

// screen2
@override
void initState(){
  super.initState();
  setLandscape(); // set to portrait
}

@override
dispose(){
  setPortrait(); // set to portrait
  super.dispose();
}

// function changes to landscape
setLandscape() {
  SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeRight,
      DeviceOrientation.landscapeLeft,
      // below 2 lines are based on your requirement
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
  ]);
}

// function changes to portrait
setPortrait() {
  SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
  ]);
}

如果您不必导航到新屏幕,这可以正常工作

但问题是从 Screen2 导航到 Screen3 时,Screen3 应该是纵向(而不是横向)。您可以在导航时更改它,并在弹出时将其恢复为横向。

// screen2

// navigates safely to next screen changing to portrait and
// reverts to landscape when popped to this screen
navigateTo(<navigate screen>) {
   setPortrait();
   Navigator.of(context)
       .push(<navigate screen>)
       .then(() => setLandscape()); // then completes when pop() returns to this page
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多