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

使用Flutter开发Ubuntu应用如何实现演示模式全屏切换

Flutter Ubuntu端演示模式自动切换全屏实现方案

直接用桌面端窗口控制插件实现即可,不需要自己写Linux原生桥接代码,步骤如下:

  • 第一步:添加依赖
    项目中引入window_manager插件,这是目前Flutter桌面端兼容性最好的窗口控制库,对Ubuntu下GNOME、KDE等主流桌面环境均适配完善,无额外系统依赖。在项目根目录的pubspec.yaml中添加如下依赖:
    dependencies:
      flutter:
        sdk: flutter
      window_manager: ^0.3.9
    
    保存后执行flutter pub get完成依赖安装。
  • 第二步:初始化窗口控制能力
    修改程序入口main.dart的代码,在runApp之前完成窗口插件的初始化,否则Linux端会出现控制指令不生效的问题:
    import 'package:flutter/material.dart';
    import 'package:window_manager/window_manager.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      // 必须调用该初始化方法,桌面端窗口控制才能正常工作
      await windowManager.ensureInitialized();
      runApp(const MyApp());
    }
    
  • 第三步:实现演示模式切换逻辑
    不要使用移动端的SystemChrome.setEnabledSystemUIMode相关API,这套逻辑在Linux桌面端完全无效,直接调用window_manager提供的全屏控制方法即可。在你的演示模式切换按钮/触发逻辑中加入如下代码:
    // 演示模式状态标记
    bool _isPresentationMode = false;
    
    /// 切换演示模式
    Future<void> _handlePresentationModeToggle() async {
      setState(() {
        _isPresentationMode = !_isPresentationMode;
      });
    
      if (_isPresentationMode) {
        // 进入演示模式:开启系统级真全屏,自动隐藏系统顶栏、任务栏
        await windowManager.setFullScreen(true);
        // 可选配置:将窗口固定在最上层,避免演示过程中被其他弹窗/窗口遮挡
        await windowManager.setAlwaysOnTop(true);
      } else {
        // 退出演示模式:关闭全屏,恢复窗口原有尺寸和位置
        await windowManager.setFullScreen(false);
        // 取消窗口置顶
        await windowManager.setAlwaysOnTop(false);
      }
    }
    
  • 第四步:补全桌面端交互适配
    桌面端用户习惯按ESC键退出全屏/演示模式,建议给幻灯片页面添加键盘监听,避免交互不符合预期:
    @override
    Widget build(BuildContext context) {
      return Focus(
        autofocus: true,
        onKeyEvent: (node, event) {
          // 演示模式下按ESC自动退出
          if (event.logicalKey == LogicalKeyboardKey.escape && _isPresentationMode) {
            _handlePresentationModeToggle();
            return KeyEventResult.handled;
          }
          return KeyEventResult.ignored;
        },
        child: // 此处放置你的幻灯片页面主体内容
      );
    }
    

踩坑提示:如果后续将应用打包为严格沙箱模式的Snap包,需要在打包配置中声明desktop接口权限,否则全屏控制会被沙箱拦截;debug模式、Deb包安装模式下无需额外配置即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:15:11