在准備學習使用 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
所有事件都觸發