Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork263
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
leanflutter/window_manager
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This plugin allows Flutter desktop apps to resizing and repositioning the window.
English |简体中文
- Platform Support
- Quick Start
- Articles
- Who's using it?
- API
- WindowManager
- Methods
- waitUntilReadyToShow
- destroy
- close
- isPreventClose
- setPreventClose
- focus
- blur
macoswindows - isFocused
macoswindows - show
- hide
- isVisible
- isMaximized
- maximize
- unmaximize
- isMinimized
- minimize
- restore
- isFullScreen
- setFullScreen
- isDockable
windows - isDocked
windows - dock
windows - undock
windows - setAspectRatio
- setBackgroundColor
- setAlignment
- center
- getBounds
- setBounds
- getSize
- setSize
- getPosition
- setPosition
- setMinimumSize
- setMaximumSize
- isResizable
- setResizable
- isMovable
macos - setMovable
macos - isMinimizable
macoswindows - setMinimizable
macoswindows - isClosable
windows - isMaximizable
macoswindows - setMaximizable
- setClosable
macoswindows - isAlwaysOnTop
- setAlwaysOnTop
- isAlwaysOnBottom
- setAlwaysOnBottom
linuxwindows - getTitle
- setTitle
- setTitleBarStyle
- getTitleBarHeight
- isSkipTaskbar
- setSkipTaskbar
- setProgressBar
macoswindows - setIcon
windows - isVisibleOnAllWorkspaces
macos - setVisibleOnAllWorkspaces
macos - setBadgeLabel
macos - hasShadow
macoswindows - setHasShadow
macoswindows - getOpacity
- setOpacity
- setBrightness
- setIgnoreMouseEvents
- startDragging
- startResizing
linuxwindows - grabKeyboard
linux - ungrabKeyboard
linux
- Methods
- WindowListener
- WindowManager
- Contributors
- License
| Linux | macOS | Windows |
|---|---|---|
| ✔️ | ✔️ | ✔️ |
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
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.
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 }}
If you need to use the hide method, you need to disableQuitOnClose.
Change the filemacos/Runner/AppDelegate.swift as follows:
import Cocoaimport FlutterMacOS@NSApplicationMainclass AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {- return true+ return false }}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(); }, ), ], ); }, ); } }}
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));}...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()+ }}
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 }}
- 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
Wait until ready to show.
Force closing the window.
Try to close the window.
Check if is intercepting the native close signal.
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.
Focuses on the window.
Removes focus from the window.
Returnsbool - Whether window is focused.
Shows and gives focus to the window.
Hides the window.
Returnsbool - Whether the window is visible to the user.
Returnsbool - Whether the window is maximized.
Maximizes the window.vertically simulates aero snap, only works on Windows
Unmaximizes the window.
Returnsbool - Whether the window is minimized.
Minimizes the window. On some platforms the minimized window will be shown in the Dock.
Restores the window from minimized state to its previous state.
Returnsbool - Whether the window is in fullscreen mode.
Sets whether the window should be in fullscreen mode.
Returnsbool - Whether the window is dockable or not.
Returnsbool - Whether the window is docked.
Docks the window. only works on Windows
Undocks the window. only works on Windows
This will make a window maintain an aspect ratio.
Sets the background color of the window.
Move the window to a position aligned with the screen.
Moves window to the center of the screen.
ReturnsRect - The bounds of the window as Object.
Resizes and moves the window to the supplied bounds.
ReturnsSize - Contains the window's width and height.
Resizes the window towidth andheight.
ReturnsOffset - Contains the window's current position.
Moves window to position.
Sets the minimum size of window towidth andheight.
Sets the maximum size of window towidth andheight.
Returnsbool - Whether the window can be manually resized by the user.
Sets whether the window can be manually resized by the user.
Returnsbool - Whether the window can be moved by user.
Sets whether the window can be moved by user.
Returnsbool - Whether the window can be manually minimized by the user.
Sets whether the window can be manually minimized by user.
Returnsbool - Whether the window can be manually closed by user.
Returnsbool - Whether the window can be manually maximized by the user.
Sets whether the window can be manually maximized by the user.
Sets whether the window can be manually closed by user.
Returnsbool - Whether the window is always on top of other windows.
Sets whether the window should show always on top of other windows.
Returnsbool - Whether the window is always below other windows.
Sets whether the window should show always below other windows.
ReturnsString - The title of the native window.
Changes the title of native window to title.
Changes the title bar style of native window.
Returnsint - The title bar height of the native window.
Returnsbool - Whether skipping taskbar is enabled.
Makes the window not show in the taskbar / dock.
Sets progress value in progress bar. Valid range is [0, 1.0].
Sets window/taskbar icon.
Returnsbool - Whether the window is visible on all workspaces.
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{// ...}
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])
Returnsbool - Whether the window has a shadow. On Windows, always returns true unless window is frameless.
Sets whether the window should have a shadow. On Windows, doesn't do anything unless window is frameless.
Returnsdouble - between 0.0 (fully transparent) and 1.0 (fully opaque).
Sets the opacity of the window.
Sets the brightness of the window.
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.
Starts a window drag based on the specified mouse-down event.
Starts a window resize based on the specified mouse-down & mouse-move event.
Grabs the keyboard.
Ungrabs the keyboard.
Emitted when the window is going to be closed.
Emitted when the window gains focus.
Emitted when the window loses focus.
Emitted when window is maximized.
Emitted when the window exits from a maximized state.
Emitted when the window is minimized.
Emitted when the window is restored from a minimized state.
Emitted after the window has been resized.
Emitted once when the window has finished being resized.
Emitted when the window is being moved to a new position.
Emitted once when the window is moved to a new position.
Emitted when the window enters a full-screen state.
Emitted when the window leaves a full-screen state.
Emitted when the window entered a docked state.
Emitted when the window leaves a docked state.
Emitted all events.
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
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.