Flutter Windows平台如何隐藏任务栏?新手尝试代码仅隐藏标题栏
在Flutter Windows应用中隐藏任务栏的解决方法
你用的SystemChrome是针对移动端(Android/iOS)的API,在Windows平台完全不生效,这就是为什么代码只隐藏了标题栏却没处理任务栏。下面是两种可行的解决思路:
方案一:优化window_manager的配置
window_manager的setFullScreen(true)默认可能只是让窗口进入自身全屏模式,并未强制覆盖任务栏区域。你可以通过设置窗口边界为整个屏幕来实现覆盖:
- 确保已在
pubspec.yaml中添加window_manager依赖并执行flutter pub get - 修改初始化代码:
import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化window_manager await WindowManager.instance.ensureInitialized(); WindowOptions windowOptions = WindowOptions( fullScreen: true, titleBarStyle: TitleBarStyle.hidden, // 隐藏标题栏 // 设置窗口边界为当前主屏幕的完整尺寸,包括任务栏区域 bounds: await Screen.instance.getPrimaryDisplayBounds(), ); await WindowManager.instance.waitUntilReadyToShow(windowOptions, () async { await WindowManager.instance.show(); await WindowManager.instance.focus(); }); runApp(const MyApp()); }
方案二:使用Win32原生API直接控制任务栏
通过win32插件调用Windows原生API,直接隐藏/显示任务栏,同时让你的窗口置顶覆盖屏幕:
- 添加
win32依赖到pubspec.yaml:
dependencies: win32: ^5.0.0 # 请使用最新版本
- 编写控制代码:
import 'package:win32/win32.dart'; import 'dart:io' show Platform; // 隐藏任务栏 void hideTaskbar() { if (!Platform.isWindows) return; // 查找任务栏窗口句柄 final taskbarHwnd = FindWindow('Shell_TrayWnd', nullptr); if (taskbarHwnd != 0) { ShowWindow(taskbarHwnd, SW_HIDE); } // 查找任务栏通知区域(右下角托盘) final trayHwnd = FindWindow('TrayNotifyWnd', nullptr); if (trayHwnd != 0) { ShowWindow(trayHwnd, SW_HIDE); } } // 恢复任务栏显示 void showTaskbar() { if (!Platform.isWindows) return; final taskbarHwnd = FindWindow('Shell_TrayWnd', nullptr); if (taskbarHwnd != 0) { ShowWindow(taskbarHwnd, SW_SHOW); } final trayHwnd = FindWindow('TrayNotifyWnd', nullptr); if (trayHwnd != 0) { ShowWindow(trayHwnd, SW_SHOW); } } // 将窗口设置为全屏置顶 void setFullScreenTopMost() { if (!Platform.isWindows) return; final hwnd = GetForegroundWindow(); // 设置窗口覆盖整个屏幕并置顶 SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW, ); }
- 在需要的地方调用:
// 进入全屏时 hideTaskbar(); setFullScreenTopMost(); // 退出全屏或关闭应用时,记得恢复任务栏 @override void dispose() { showTaskbar(); super.dispose(); }
注意事项
- 方案一更符合Flutter跨平台的思路,但部分Windows版本可能需要调整窗口参数;
- 方案二更直接,但仅适用于Windows平台,需做好平台判断;
- 务必在应用退出或恢复窗口时恢复任务栏显示,避免影响用户系统操作。
内容的提问来源于stack exchange,提问作者Aashish Shrestha
相关产品推荐
相关产品推荐

