在一些特定的 App 里,我们不希望手机横屏的时候,App 发生旋转,比如微信,企业微信都是这样的。- o# S, L3 y: L p6 g+ ]
代码可以这样设定:
5 H( K) M% I' |/ y ~& C6 T" e
- import 'package:flutter/services.dart';
-
- void main() async => {
- WidgetsFlutterBinding.ensureInitialized();
- await SystemChrome.setPreferredOrientations(
- [
- DeviceOrientation.portraitUp, // 竖屏 Portrait 模式
- DeviceOrientation.portraitDown,
- // DeviceOrientation.landscapeLeft, // 横屏 Landscape 模式
- // DeviceOrientation.landscapeRight,
- ],
- );
- runApp(MainApp());
- };
在 main 函数里,像上面那样设定,就可以做到全局禁用横屏模式了。不过,在企业微信里,并不是彻底禁用了横屏模式,如果在企业微信内部打开了一个网页,这种场景下,就是可以横屏过来用的。也就是WebView 的场景下,是可以横屏的,但是在其他界面下不可以横屏。这要怎么设置呢? ( l0 s8 R! c4 h" b4 `1 H) Y
-
- @override
- void initState() {
- super.initState();
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.landscapeLeft,
- DeviceOrientation.landscapeRight,
- DeviceOrientation.portraitUp,
- DeviceOrientation.portraitDown,
- ]);
- }
-
- @override
- void dispose() {
- SystemChrome.setPreferredOrientations([
- DeviceOrientation.portraitUp,
- DeviceOrientation.portraitDown,
- ]);
- super.dispose();
- }
像这样,设置到一个 StatefulWidget 的 initState 和 dispose 里面就可以了。比如在代码里,把 WebView 专门封装了一个页面,叫 WebPage,这样设定后,当用户进入网页的时候,可以横屏,但是退回后,就会强制恢复竖屏。 |