You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何实现仅特定页面支持横屏 其余页面强制竖屏

实现方法

核心逻辑是全局默认锁竖屏,进入特定页面时放开横屏权限,离开页面时立刻恢复竖屏锁,具体操作如下:

  • 全局初始化配置保留原有逻辑
    在main函数启动时先设置全局默认方向,注意要先初始化Flutter绑定再调用方向设置接口,避免启动时生效延迟:
import 'package:flutter/services.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 全局默认仅允许竖屏
  await SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  runApp(const MyApp());
}
  • 特定横屏页面单独处理生命周期
    需要支持横屏的页面必须用StatefulWidget,在初始化和销毁回调里分别修改方向配置:
// 这是需要支持横屏的页面
class SpecialPage extends StatefulWidget {
  const SpecialPage({super.key});

  @override
  State<SpecialPage> createState() => _SpecialPageState();
}

class _SpecialPageState extends State<SpecialPage> {
  @override
  void initState() {
    super.initState();
    // 进入页面时放开横屏权限,按需传入需要支持的方向即可
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.landscapeRight,
    ]);
    // 如果要求进入这个页面就强制横屏,只保留横屏参数就行
    // await SystemChrome.setPreferredOrientations([
    //   DeviceOrientation.landscapeLeft,
    //   DeviceOrientation.landscapeRight,
    // ]);
  }

  @override
  void dispose() {
    // 离开页面时立刻恢复全局竖屏锁,保证后续页面不会意外支持横屏
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('支持横屏的特殊页面')),
      // 其余页面内容
    );
  }
}
  • 注意事项
    • 调用方向相关API必须先引入package:flutter/services.dart依赖
    • 部分机型上如果从横屏页面跳转其他普通竖屏页面偶现方向没切回,可以在普通竖屏页面的initState里再执行一次竖屏配置,强制校正方向
    • 调用setPreferredOrientations建议加await等待配置生效,减少偶现的不生效问题

内容的提问来源于stack exchange,提问作者user16304169

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:06:19