Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

The window_manager plugin provides comprehensive window management capabilities for Flutter desktop applications, enabling full control over window size, position, appearance, close behavior, and listening to events.

License

NotificationsYou must be signed in to change notification settings

leanflutter/window_manager

Repository files navigation

pub versionAll Contributors

This plugin allows Flutter desktop apps to resizing and repositioning the window.


English |简体中文


Platform Support

LinuxmacOSWindows
✔️✔️✔️

Quick Start

Installation

Add this to your package'spubspec.yaml file:

dependencies:window_manager:^0.4.2

Or

dependencies:window_manager:git:url:https://github.com/leanflutter/window_manager.gitref:main

Usage

import'package:flutter/material.dart';import'package:window_manager/window_manager.dart';voidmain()async {WidgetsFlutterBinding.ensureInitialized();// Must add this line.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());}

Please see the example app of this plugin for a full example.

Listening events

import'package:flutter/cupertino.dart';import'package:window_manager/window_manager.dart';classHomePageextendsStatefulWidget {@override_HomePageStatecreateState()=>_HomePageState();}class_HomePageStateextendsState<HomePage>withWindowListener {@overridevoidinitState() {super.initState();    windowManager.addListener(this);  }@overridevoiddispose() {    windowManager.removeListener(this);super.dispose();  }@overrideWidgetbuild(BuildContext context) {// ...  }@overridevoidonWindowEvent(String eventName) {print('[WindowManager] onWindowEvent: $eventName');  }@overridevoidonWindowClose() {// do something  }@overridevoidonWindowFocus() {// do something  }@overridevoidonWindowBlur() {// do something  }@overridevoidonWindowMaximize() {// do something  }@overridevoidonWindowUnmaximize() {// do something  }@overridevoidonWindowMinimize() {// do something  }@overridevoidonWindowRestore() {// do something  }@overridevoidonWindowResize() {// do something  }@overridevoidonWindowMove() {// do something  }@overridevoidonWindowEnterFullScreen() {// do something  }@overridevoidonWindowLeaveFullScreen() {// do something  }}

Quit on close

If you need to use the hide method, you need to disableQuitOnClose.

macOS

Change the filemacos/Runner/AppDelegate.swift as follows:

import Cocoaimport FlutterMacOS@NSApplicationMainclass AppDelegate: FlutterAppDelegate {  override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {-    return true+    return false  }}

Confirm before closing

import'package:flutter/cupertino.dart';import'package:window_manager/window_manager.dart';classHomePageextendsStatefulWidget {@override_HomePageStatecreateState()=>_HomePageState();}class_HomePageStateextendsState<HomePage>withWindowListener {@overridevoidinitState() {super.initState();    windowManager.addListener(this);_init();  }@overridevoiddispose() {    windowManager.removeListener(this);super.dispose();  }void_init()async {// Add this line to override the default close handlerawait windowManager.setPreventClose(true);setState(() {});  }@overrideWidgetbuild(BuildContext context) {// ...  }@overridevoidonWindowClose()async {bool _isPreventClose=await windowManager.isPreventClose();if (_isPreventClose) {showDialog(        context: context,        builder: (_) {returnAlertDialog(            title:Text('Are you sure you want to close this window?'),            actions: [TextButton(                child:Text('No'),                onPressed: () {Navigator.of(context).pop();                },              ),TextButton(                child:Text('Yes'),                onPressed: () {Navigator.of(context).pop();await windowManager.destroy();                },              ),            ],          );        },      );    }  }}

Hidden at launch

Linux

Change the filelinux/my_application.cc as follows:

...// Implements GApplication::activate.static void my_application_activate(GApplication* application) {    ...  gtk_window_set_default_size(window, 1280, 720);-  gtk_widget_show(GTK_WIDGET(window));+  gtk_widget_realize(GTK_WIDGET(window));  g_autoptr(FlDartProject) project = fl_dart_project_new();  fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);  FlView* view = fl_view_new(project);  gtk_widget_show(GTK_WIDGET(view));  gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));  fl_register_plugins(FL_PLUGIN_REGISTRY(view));  gtk_widget_grab_focus(GTK_WIDGET(view));}...
macOS

Change the filemacos/Runner/MainFlutterWindow.swift as follows:

import Cocoaimport FlutterMacOS+import window_managerclass MainFlutterWindow: NSWindow {    override func awakeFromNib() {        let flutterViewController = FlutterViewController.init()        let windowFrame = self.frame        self.contentViewController = flutterViewController        self.setFrame(windowFrame, display: true)        RegisterGeneratedPlugins(registry: flutterViewController)        super.awakeFromNib()    }+    override public func order(_ place: NSWindow.OrderingMode, relativeTo otherWin: Int) {+        super.order(place, relativeTo: otherWin)+        hiddenWindowAtLaunch()+    }}
Windows

Change the filewindows/runner/win32_window.cpp as follows:

bool Win32Window::CreateAndShow(const std::wstring& title,                                const Point& origin,                                const Size& size) {  ...                                HWND window = CreateWindow(-      window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,+      window_class, title.c_str(),+      WS_OVERLAPPEDWINDOW, // do not add WS_VISIBLE since the window will be shown later      Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),      Scale(size.width, scale_factor), Scale(size.height, scale_factor),      nullptr, nullptr, GetModuleHandle(nullptr), this);

Since flutter 3.7 new windows projectChange the filewindows/runner/flutter_window.cpp as follows:

bool FlutterWindow::OnCreate() {  ...  flutter_controller_->engine()->SetNextFrameCallback([&]() {-   this->Show();+   "" //delete this->Show()  });

Make sure to callsetState once on theonWindowFocus event.

import'package:flutter/cupertino.dart';import'package:window_manager/window_manager.dart';classHomePageextendsStatefulWidget {@override_HomePageStatecreateState()=>_HomePageState();}class_HomePageStateextendsState<HomePage>withWindowListener {@overridevoidinitState() {super.initState();    windowManager.addListener(this);  }@overridevoiddispose() {    windowManager.removeListener(this);super.dispose();  }@overrideWidgetbuild(BuildContext context) {// ...  }@overridevoidonWindowFocus() {// Make sure to call once.setState(() {});// do something  }}

Articles

Who's using it?

  • Airclap - Send any file to any device. cross platform, ultra fast and easy to use.
  • AuthPass - Password Manager based on Flutter for all platforms. Keepass 2.x (kdbx 3.x) compatible.
  • Biyi (比译) - A convenient translation and dictionary app written in dart / Flutter.
  • BlueBubbles - BlueBubbles is an ecosystem of apps bringing iMessage to Android, Windows, and Linux
  • LunaSea - A self-hosted controller for mobile and macOS built using the Flutter framework.
  • Linwood Butterfly - Open source note taking app written in Flutter
  • RustDesk - Yet another remote desktop software, written in Rust. Works out of the box, no configuration required.
  • Ubuntu Desktop Installer - This project is a modern implementation of the Ubuntu Desktop installer.
  • UniControlHub - Seamlessly bridge your Desktop and Mobile devices
  • EyesCare - A light-weight application following 20 rule adherence for optimum eye health

API

WindowManager

Methods

waitUntilReadyToShow

Wait until ready to show.

destroy

Force closing the window.

close

Try to close the window.

isPreventClose

Check if is intercepting the native close signal.

setPreventClose

Set if intercept the native close signal. May useful when combine with the onclose event listener.This will also prevent the manually triggered close event.

focus

Focuses on the window.

blurmacoswindows

Removes focus from the window.

isFocusedmacoswindows

Returnsbool - Whether window is focused.

show

Shows and gives focus to the window.

hide

Hides the window.

isVisible

Returnsbool - Whether the window is visible to the user.

isMaximized

Returnsbool - Whether the window is maximized.

maximize

Maximizes the window.vertically simulates aero snap, only works on Windows

unmaximize

Unmaximizes the window.

isMinimized

Returnsbool - Whether the window is minimized.

minimize

Minimizes the window. On some platforms the minimized window will be shown in the Dock.

restore

Restores the window from minimized state to its previous state.

isFullScreen

Returnsbool - Whether the window is in fullscreen mode.

setFullScreen

Sets whether the window should be in fullscreen mode.

isDockablewindows

Returnsbool - Whether the window is dockable or not.

isDockedwindows

Returnsbool - Whether the window is docked.

dockwindows

Docks the window. only works on Windows

undockwindows

Undocks the window. only works on Windows

setAspectRatio

This will make a window maintain an aspect ratio.

setBackgroundColor

Sets the background color of the window.

setAlignment

Move the window to a position aligned with the screen.

center

Moves window to the center of the screen.

getBounds

ReturnsRect - The bounds of the window as Object.

setBounds

Resizes and moves the window to the supplied bounds.

getSize

ReturnsSize - Contains the window's width and height.

setSize

Resizes the window towidth andheight.

getPosition

ReturnsOffset - Contains the window's current position.

setPosition

Moves window to position.

setMinimumSize

Sets the minimum size of window towidth andheight.

setMaximumSize

Sets the maximum size of window towidth andheight.

isResizable

Returnsbool - Whether the window can be manually resized by the user.

setResizable

Sets whether the window can be manually resized by the user.

isMovablemacos

Returnsbool - Whether the window can be moved by user.

setMovablemacos

Sets whether the window can be moved by user.

isMinimizablemacoswindows

Returnsbool - Whether the window can be manually minimized by the user.

setMinimizablemacoswindows

Sets whether the window can be manually minimized by user.

isClosablewindows

Returnsbool - Whether the window can be manually closed by user.

isMaximizablemacoswindows

Returnsbool - Whether the window can be manually maximized by the user.

setMaximizable

Sets whether the window can be manually maximized by the user.

setClosablemacoswindows

Sets whether the window can be manually closed by user.

isAlwaysOnTop

Returnsbool - Whether the window is always on top of other windows.

setAlwaysOnTop

Sets whether the window should show always on top of other windows.

isAlwaysOnBottom

Returnsbool - Whether the window is always below other windows.

setAlwaysOnBottomlinuxwindows

Sets whether the window should show always below other windows.

getTitle

ReturnsString - The title of the native window.

setTitle

Changes the title of native window to title.

setTitleBarStyle

Changes the title bar style of native window.

getTitleBarHeight

Returnsint - The title bar height of the native window.

isSkipTaskbar

Returnsbool - Whether skipping taskbar is enabled.

setSkipTaskbar

Makes the window not show in the taskbar / dock.

setProgressBarmacoswindows

Sets progress value in progress bar. Valid range is [0, 1.0].

setIconwindows

Sets window/taskbar icon.

isVisibleOnAllWorkspacesmacos

Returnsbool - Whether the window is visible on all workspaces.

setVisibleOnAllWorkspacesmacos

Sets whether the window should be visible on all workspaces.

Note: If you need to support dragging a window on top of a fullscreenwindow on another screen, you need to modify MainFlutterWindowto inherit from NSPanel

classMainFlutterWindow:NSPanel{// ...}
setBadgeLabelmacos

Set/unset label on taskbar(dock) app icon

Note that it's required to request access at your AppDelegate.swift like this:UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge])

hasShadowmacoswindows

Returnsbool - Whether the window has a shadow. On Windows, always returns true unless window is frameless.

setHasShadowmacoswindows

Sets whether the window should have a shadow. On Windows, doesn't do anything unless window is frameless.

getOpacity

Returnsdouble - between 0.0 (fully transparent) and 1.0 (fully opaque).

setOpacity

Sets the opacity of the window.

setBrightness

Sets the brightness of the window.

setIgnoreMouseEvents

Makes the window ignore all mouse events.

All mouse events happened in this window will be passed to the window below this window, but if this window has focus, it will still receive keyboard events.

startDragging

Starts a window drag based on the specified mouse-down event.

startResizinglinuxwindows

Starts a window resize based on the specified mouse-down & mouse-move event.

grabKeyboardlinux

Grabs the keyboard.

ungrabKeyboardlinux

Ungrabs the keyboard.

WindowListener

Methods

onWindowClose

Emitted when the window is going to be closed.

onWindowFocus

Emitted when the window gains focus.

onWindowBlur

Emitted when the window loses focus.

onWindowMaximize

Emitted when window is maximized.

onWindowUnmaximize

Emitted when the window exits from a maximized state.

onWindowMinimize

Emitted when the window is minimized.

onWindowRestore

Emitted when the window is restored from a minimized state.

onWindowResize

Emitted after the window has been resized.

onWindowResizedmacoswindows

Emitted once when the window has finished being resized.

onWindowMove

Emitted when the window is being moved to a new position.

onWindowMovedmacoswindows

Emitted once when the window is moved to a new position.

onWindowEnterFullScreen

Emitted when the window enters a full-screen state.

onWindowLeaveFullScreen

Emitted when the window leaves a full-screen state.

onWindowDockedwindows

Emitted when the window entered a docked state.

onWindowUndockedwindows

Emitted when the window leaves a docked state.

onWindowEvent

Emitted all events.

Contributors

LiJianying
LiJianying

💻
 A Arif A S
A Arif A S

💻
J-P Nurmi
J-P Nurmi

💻
Dixeran
Dixeran

💻
nikitatg
nikitatg

💻
Kristen McWilliam
Kristen McWilliam

💻
Kingtous
Kingtous

💻
Prome
Prome

💻
Bin
Bin

💻
youxiachai
youxiachai

💻
Allen Xu
Allen Xu

💻
CodeDoctor
CodeDoctor

💻
Jean-Christophe Binet
Jean-Christophe Binet

💻
Jon Salmon
Jon Salmon

💻
Karol Wrótniak
Karol Wrótniak

💻
LAIIIHZ
LAIIIHZ

💻
Mikhail Kulesh
Mikhail Kulesh

💻
Prateek Sunal
Prateek Sunal

💻
Ricardo Boss
Ricardo Boss

💻
Add your contributions

License

MIT

About

The window_manager plugin provides comprehensive window management capabilities for Flutter desktop applications, enabling full control over window size, position, appearance, close behavior, and listening to events.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

[8]ページ先頭

©2009-2025 Movatter.jp