Flutter桌面端開發——window_manager插件的使用


在准備學習使用 flutter 開發桌面端的時候,找到了 bitsdojo_window 這個插件

window_manager 可以用來調整桌面端的窗口大小和位置

安裝

點擊 window_manager 獲取最新版本

pubspec.yaml

dependencies:
  window_manager: ^last_version

使用

按照官方文檔,添加如下代碼到 lib/main.dart

import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 必須加上這一行。
  await windowManager.ensureInitialized();

  WindowOptions windowOptions = WindowOptions(
    size: Size(800, 600),
    center: true,
    backgroundColor: Colors.transparent,
    skipTaskbar: false,
    titleBarStyle: TitleBarStyle.hidden,
  );
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(MyApp());
}

按照以上方法直接運行,會有個小 bug,可以運行試一下。

要想修復這個問題,需要打開 windows/runner/win32_window.cpp 文件,在大約 119 行的方法中做如下修改:

HWND window = CreateWindow(
  // 原代碼 window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
  window_class, title.c_str(), WS_OVERLAPPEDWINDOW,

macOS 和 Linux 端查看 https://github.com/leanflutter/window_manager#hidden-at-launch 進行更改。

👻本來是想做個教程的,然后發現官方文檔把每個方法和用處都寫出來了,這里就做個翻譯。還有一些例子可以去文檔看看。

這里有幾個組件是文檔沒有寫的:

  • DragToMoveArea
  • DragToResizeArea
  • VirtualWindowFrame(僅Linux)
  • WindowCaption
  • WindowCaptionButtonIcon

WindowManager

destroy macos windows

強制關閉窗口

close

關閉窗口

isPreventClose

檢測窗口是否將要關閉

setPreventClose

用來覆蓋默認的關閉程序,具體文檔有例子

focus

聚焦在窗口上

blur

從窗口移除聚焦

isFocused macos windows

檢測當前是否聚焦在窗口

show

顯示並聚焦於窗口

hide

隱藏窗口

isVisible

檢測窗口當前是否對用戶可見

isMaximized

檢測當前窗口是否最大化

maximize

最大化窗口

unmaximize

取消窗口最大化

isMinimized

檢測當前窗口是否是最小化

minimize

最小化窗口

restore

從最小化狀態下恢復窗口

isFullScreen

檢測當前是否全屏

setFullScreen

設置窗口全屏

setAspectRatio

使窗口保持寬高比

setBackgroundColor

設置背景色

getBounds

獲取窗口的邊界大小

setBounds

調整窗口大小,並將窗口移動到提供的邊界

getPosition

獲取當前窗口在屏幕的位置

setAlignment

設置窗口對齊到屏幕的位置

center

設置窗口顯示在屏幕中間

setPosition

設置當前窗口在屏幕的位置

getSize

獲取窗口的大小

setSize

設置窗口的大小

setMinimumSize

設置窗口尺寸的最小值

setMaximumSize

設置窗口尺寸的最大值

isResizable

檢測用戶是否可以手動調整窗口大小

setResizable

設置窗口是否可以由用戶手動調整大小

isMovable macos

檢測用戶是否可以移動窗口

setMovable macos

設置用戶是否可以移動窗口

isMinimizable macos windows

檢測用戶是否可以手動最小化該窗口

setMinimizable macos windows

設置用戶是否可以手動最小化窗口

isClosable macos windows

檢測用戶是否可以手動關閉該窗口

setClosable macos windows

設置用戶是否可以手動關閉該窗口

isAlwaysOnTop

檢測窗口是否總是顯示在其他窗口的頂部

setAlwaysOnTop

設置窗口是否總是顯示在其他窗口的頂部

getTitle

獲取原生窗口的標題

setTitle

設置原生窗口的標題

setTitleBarStyle macos windows

設置標題欄的顯示風格

getTitleBarHeight macos windows

獲取標題欄的高度

setSkipTaskbar

設置窗口是否顯示在 任務欄或 Dock 上

setProgressBar macos

在進度條中設置進度值。有效范圍為[0,1.0]。

hasShadow macos

檢測當前窗口是否有陰影

setHasShadow macos

設置窗口是否應該有陰影

getOpacity macos windows

獲取窗口透明度,在0(完全透明)—1(完全不透明)。Linux總是返回1

setOpacity macos windows

設置窗口透明度

setBrightness macos windows

設置窗口的亮度

setIgnoreMouseEvents

使窗口忽略所有鼠標事件。

在這個窗口中發生的所有鼠標事件都會傳遞到這個窗口下面的窗口,但是如果這個窗口有焦點,它仍然會接收鍵盤事件。

startDragging

基於指定的鼠標按下事件啟動窗口拖動

startResizing linux windows

根據指定的鼠標按下和移動事件啟動窗口大小調整

WindowListener

onWindowClose

當窗口關閉時觸發

onWindowFocus

當窗口聚焦時觸發

onWindowBlur

當窗口失去焦點時觸發

onWindowMaximize

當窗口最大化時觸發

onWindowUnmaximize

當窗口退出最大化時觸發

onWindowMinimize

當窗口最小化時觸發

onWindowRestore

當窗口從最小化狀態恢復時觸發

onWindowResize

當窗口重新調整大小后觸發

onWindowMove

當窗口移動時觸發

onWindowEnterFullScreen

當窗口進入全屏狀態時觸發

onWindowLeaveFullScreen

當窗口離開全屏狀態時觸發

onWindowEvent

所有事件都觸發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM