【问题标题】:Not able to change orientation in Flutter无法在 Flutter 中更改方向
【发布时间】:2020-02-18 04:42:34
【问题描述】:

使用下面的代码后,我无法将方向更改为横向模式。我在处置时也将方向恢复正常。

我想要做的是,我希望一个特定的活动在 android 和 IOS 上都是纵向的,而其他活动是正常的(纵向和横向)

@override
  void initState() {
    super.initState();
    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
}

@override
  void dispose() {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.landscapeRight
    ]);
}

【问题讨论】:

  • 尝试在 dispose 方法中像这样调用。 SystemChrome.setPreferredOrientations([ ]);

标签: flutter orientation


【解决方案1】:

尝试使用 dart pub 上提供的这个颤振包:

https://pub.dev/packages/auto_orientation#-readme-tab-

【讨论】:

    【解决方案2】:

    你可以使用包https://pub.dev/packages/auto_orientation

    代码sn-p

    FlatButton(
            onPressed: () {
              AutoOrientation.portraitDownMode();
            }
    

    完整示例代码

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:auto_orientation/auto_orientation.dart';
    
    void main() {
      runApp(
        AutoOrientationDemo(),
      );
    }
    
    class AutoOrientationDemo extends StatefulWidget {
      AutoOrientationDemo({this.title = 'Auto Orientation Demo'});
    
      final String title;
    
      @override
      State<StatefulWidget> createState() {
        return _AutoOrientationDemoState();
      }
    }
    
    class _AutoOrientationDemoState extends State<AutoOrientationDemo> {
      TargetPlatform _platform;
    
      @override
      void initState() {
        super.initState();
      }
    
      @override
      void dispose() {
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: widget.title,
          theme: ThemeData.light().copyWith(
            platform: _platform ?? Theme.of(context).platform,
          ),
          home: Scaffold(
            appBar: AppBar(
              title: Text(widget.title),
            ),
            body: Column(
              children: <Widget>[
                Row(
                  children: <Widget>[
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.portraitDownMode();
                        },
                        child: Padding(
                          child: Text("Portrait UPSIDE Down"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.fullAutoMode();
                        },
                        child: Padding(
                          child: Text("All modes"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                  ],
                ),
    
                Row(
                  children: <Widget>[
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.landscapeAutoMode();
                        },
                        child: Padding(
                          child: Text("Landscape auto"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.portraitAutoMode();
                        },
                        child: Padding(
                          child: Text("Portrait auto"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                  ],
                ),
    
                Row(
                  children: <Widget>[
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.landscapeLeftMode();
                        },
                        child: Padding(
                          child: Text("Landscape left mode"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          SystemChrome.setPreferredOrientations([
                            DeviceOrientation.portraitUp,
                            DeviceOrientation.portraitDown,
                            DeviceOrientation.landscapeLeft,
                            DeviceOrientation.landscapeRight,
                          ]);
                          AutoOrientation.landscapeRightMode();
                        },
                        child: Padding(
                          child: Text("Landscape right mode"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                  ],
                ),
                Row(
                  children: <Widget>[
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.portraitUpMode();
                        },
                        child: Padding(
                          child: Text("Portrait up mode"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          AutoOrientation.portraitDownMode();
                        },
                        child: Padding(
                          child: Text("Portrait down mode"),
                          padding: EdgeInsets.symmetric(vertical: 16.0),
                        ),
                      ),
                    ),
                  ],
                )
              ],
            ),
          ),
        );
      }
    }
    

    示例演示

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2022-12-09
      • 2019-10-06
      • 2013-09-04
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多