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

Flutter Windows平台如何隐藏任务栏?新手尝试代码仅隐藏标题栏

在Flutter Windows应用中隐藏任务栏的解决方法

你用的SystemChrome是针对移动端(Android/iOS)的API,在Windows平台完全不生效,这就是为什么代码只隐藏了标题栏却没处理任务栏。下面是两种可行的解决思路:

方案一:优化window_manager的配置

window_manager的setFullScreen(true)默认可能只是让窗口进入自身全屏模式,并未强制覆盖任务栏区域。你可以通过设置窗口边界为整个屏幕来实现覆盖:

  1. 确保已在pubspec.yaml中添加window_manager依赖并执行flutter pub get
  2. 修改初始化代码:
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,直接隐藏/显示任务栏,同时让你的窗口置顶覆盖屏幕:

  1. 添加win32依赖到pubspec.yaml:
dependencies:
  win32: ^5.0.0 # 请使用最新版本
  1. 编写控制代码:
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,
  );
}
  1. 在需要的地方调用:
// 进入全屏时
hideTaskbar();
setFullScreenTopMost();

// 退出全屏或关闭应用时,记得恢复任务栏
@override
void dispose() {
  showTaskbar();
  super.dispose();
}

注意事项

  • 方案一更符合Flutter跨平台的思路,但部分Windows版本可能需要调整窗口参数;
  • 方案二更直接,但仅适用于Windows平台,需做好平台判断;
  • 务必在应用退出或恢复窗口时恢复任务栏显示,避免影响用户系统操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:10:58