Este complemento permite que las aplicaciones de escritorio Flutter cambie el tamaño y el reposicionamiento de la ventana.
Inglés | 简体中文
windows de desenfoque macosmacos windowswindowswindowswindows de muellewindowsmacos ismoviblesmacoswindows macos isminimizablemacos windowswindows de ISCLOSIBLEmacos windowsmacos windowslinux windowsmacos windowswindows de Seticonmacosmacosmacosmacos windowsmacos windowslinux windowslinuxlinuxmacos windows MacOSmacos windows en WindowMovedwindows OnWindowdockedwindows en WindowUncocked| Linux | macosa | Windows |
|---|---|---|
| ✔️ | ✔️ | ✔️ |
Agregue esto al archivo pubspec.yaml de su paquete:
dependencies :
window_manager : ^0.4.2O
dependencies :
window_manager :
git :
url : https://github.com/leanflutter/window_manager.git
ref : main import 'package:flutter/material.dart' ;
import 'package:window_manager/window_manager.dart' ;
void main () 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 ());
}
Consulte la aplicación de ejemplo de este complemento para obtener un ejemplo completo.
import 'package:flutter/cupertino.dart' ;
import 'package:window_manager/window_manager.dart' ;
class HomePage extends StatefulWidget {
@override
_HomePageState createState () => _HomePageState ();
}
class _HomePageState extends State < HomePage > with WindowListener {
@override
void initState () {
super . initState ();
windowManager. addListener ( this );
}
@override
void dispose () {
windowManager. removeListener ( this );
super . dispose ();
}
@override
Widget build ( BuildContext context) {
// ...
}
@override
void onWindowEvent ( String eventName) {
print ( '[WindowManager] onWindowEvent: $ eventName ' );
}
@override
void onWindowClose () {
// do something
}
@override
void onWindowFocus () {
// do something
}
@override
void onWindowBlur () {
// do something
}
@override
void onWindowMaximize () {
// do something
}
@override
void onWindowUnmaximize () {
// do something
}
@override
void onWindowMinimize () {
// do something
}
@override
void onWindowRestore () {
// do something
}
@override
void onWindowResize () {
// do something
}
@override
void onWindowMove () {
// do something
}
@override
void onWindowEnterFullScreen () {
// do something
}
@override
void onWindowLeaveFullScreen () {
// do something
}
} Si necesita usar el método Hide, debe deshabilitar QuitOnClose .
Cambie el archivo macos/Runner/AppDelegate.swift de la siguiente manera:
import Cocoa
import FlutterMacOS
@NSApplicationMain
class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
- return true
+ return false
}
} import 'package:flutter/cupertino.dart' ;
import 'package:window_manager/window_manager.dart' ;
class HomePage extends StatefulWidget {
@override
_HomePageState createState () => _HomePageState ();
}
class _HomePageState extends State < HomePage > with WindowListener {
@override
void initState () {
super . initState ();
windowManager. addListener ( this );
_init ();
}
@override
void dispose () {
windowManager. removeListener ( this );
super . dispose ();
}
void _init () async {
// Add this line to override the default close handler
await windowManager. setPreventClose ( true );
setState (() {});
}
@override
Widget build ( BuildContext context) {
// ...
}
@override
void onWindowClose () async {
bool _isPreventClose = await windowManager. isPreventClose ();
if (_isPreventClose) {
showDialog (
context : context,
builder : (_) {
return AlertDialog (
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 ();
},
),
],
);
},
);
}
}
} Cambie el archivo linux/my_application.cc de la siguiente manera:
...
// 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));
}
...
Cambie el archivo macos/Runner/MainFlutterWindow.swift de la siguiente manera:
import Cocoa
import FlutterMacOS
+ import window_manager
class 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()
+ }
}
Cambie el archivo windows/runner/win32_window.cpp de la siguiente manera:
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); Dado que Flutter 3.7 New Windows Project cambia el archivo windows/runner/flutter_window.cpp como sigue:
bool FlutterWindow::OnCreate() {
...
flutter_controller_->engine()->SetNextFrameCallback([&]() {
- this->Show();
+ "" //delete this->Show()
}); Asegúrese de llamar setState una vez en el evento onWindowFocus .
import 'package:flutter/cupertino.dart' ;
import 'package:window_manager/window_manager.dart' ;
class HomePage extends StatefulWidget {
@override
_HomePageState createState () => _HomePageState ();
}
class _HomePageState extends State < HomePage > with WindowListener {
@override
void initState () {
super . initState ();
windowManager. addListener ( this );
}
@override
void dispose () {
windowManager. removeListener ( this );
super . dispose ();
}
@override
Widget build ( BuildContext context) {
// ...
}
@override
void onWindowFocus () {
// Make sure to call once.
setState (() {});
// do something
}
}
Espere hasta que esté listo para mostrar.
Fuerza cerrando la ventana.
Intenta cerrar la ventana.
Verifique si está interceptando la señal de cierre nativa.
Establezca si intercepta la señal de cierre nativa. Puede ser útil cuando se combine con el oyente de eventos OnClose. Esto también evitará el evento cercano activado manualmente.
Se enfoca en la ventana.
windows de desenfoque macosElimina el enfoque de la ventana.
macos windows Devuelve bool : si la ventana está enfocada.
Muestra y da enfoque a la ventana.
Esconde la ventana.
Devuelve bool : si la ventana es visible para el usuario.
Devuelve bool : si la ventana está maximizada.
Maximiza la ventana. Simula vertically Aero Snap, solo funciona en Windows
Sin maximizar la ventana.
Devuelve bool : si la ventana está minimizada.
Minimiza la ventana. En algunas plataformas, la ventana minimizada se mostrará en el muelle.
Restaura la ventana del estado minimizado a su estado anterior.
Devuelve bool : si la ventana está en modo de pantalla completa.
Establece si la ventana debe estar en modo de pantalla completa.
windows Devuelve bool : si la ventana es acopilable o no.
windows Devuelve bool : si la ventana está atracada.
windows de muelleMuella la ventana. Solo funciona en Windows
windowsDesacopla la ventana. Solo funciona en Windows
Esto hará que una ventana mantenga una relación de aspecto.
Establece el color de fondo de la ventana.
Mueva la ventana a una posición alineada con la pantalla.
Mueve la ventana al centro de la pantalla.
Devuelve Rect - los límites de la ventana como objeto.
Cambia de tamaño y mueve la ventana a los límites suministrados.
Size de devolución: contiene el ancho y la altura de la ventana.
Cambiar el tamaño de la ventana al width y height .
Devuelve Offset : contiene la posición actual de la ventana.
Mueve la ventana a la posición.
Establece el tamaño mínimo de la ventana al width y height .
Establece el tamaño máximo de la ventana al width y height .
Devuelve bool : si la ventana puede cambiar el tamaño manualmente por el usuario.
Establece si el usuario puede cambiar el tamaño manualmente de la ventana.
macos ismovibles Devuelve bool : si el usuario puede mover la ventana.
macosEstablece si el usuario puede mover la ventana.
windows macos isminimizable Devuelve bool : si el usuario puede minimizar manualmente la ventana.
macos windowsEstablece si el usuario puede minimizar manualmente la ventana.
windows de ISCLOSIBLE Devuelve bool : si el usuario puede cerrar manualmente la ventana.
macos windows Devuelve bool : si el usuario puede maximizar manualmente la ventana.
Establece si el usuario puede maximizar manualmente la ventana.
macos windowsEstablece si el usuario puede cerrar manualmente la ventana.
Devuelve bool : si la ventana siempre está encima de otras ventanas.
Establece si la ventana debe mostrarse siempre encima de otras ventanas.
Devuelve bool : si la ventana siempre está debajo de otras ventanas.
linux windowsEstablece si la ventana debe mostrarse siempre debajo de otras ventanas.
Devuelve String : el título de la ventana nativa.
Cambia el título de la ventana nativa al título.
Cambia el estilo de la barra de título de la ventana nativa.
Devuelve int - la altura de la barra de título de la ventana nativa.
Devuelve bool : si saltar la barra de tareas está habilitado.
Hace que la ventana no se muestre en la barra de tareas / muelle.
macos windowsEstablece el valor de progreso en la barra de progreso. El rango válido es [0, 1.0].
windows de SeticonEstablece el icono de ventana/barra de tareas.
macos Devuelve bool : si la ventana es visible en todos los espacios de trabajo.
macosEstablece si la ventana debe ser visible en todos los espacios de trabajo.
Nota: Si necesita admitir arrastrar una ventana sobre una ventana de pantalla completa en otra pantalla, debe modificar MainflutterWindow para heredar desde NSPanel
class MainFlutterWindow : NSPanel {
// ...
} macosEtiqueta set/unset en la barra de tareas (Dock) icono de la aplicación
Tenga en cuenta que se requiere solicitar acceso en su AppDelegate.swift de la misma manera: UnuseNotificationCenter.Current (). SolicitudeAuthorización (Opciones: [.alert, .badge])
macos windows Devuelve bool : si la ventana tiene una sombra. En Windows, siempre devuelve verdadero a menos que la ventana no esté enmarcada.
macos windowsEstablece si la ventana debe tener una sombra. En Windows, no hace nada a menos que la ventana no esté enmarcada.
Devuelve double - entre 0.0 (completamente transparente) y 1.0 (completamente opaco).
Establece la opacidad de la ventana.
Establece el brillo de la ventana.
Hace que la ventana ignore todos los eventos del mouse.
Todos los eventos del mouse ocurrieron en esta ventana se pasarán a la ventana debajo de esta ventana, pero si esta ventana tiene enfoque, aún recibirá eventos de teclado.
Inicia un arrastre de ventana basado en el evento especificado del mouse hacia abajo.
linux windowsInicia un cambio de tamaño de la ventana basado en el evento especificado de mouse-down & mouse-move.
linuxAgarra el teclado.
linuxDesacredita el teclado.
Emitido cuando la ventana se va a cerrar.
Emitido cuando la ventana gana enfoque.
Emitido cuando la ventana pierde el enfoque.
Emitido cuando se maximiza la ventana.
Emitido cuando la ventana sale de un estado maximizado.
Emitido cuando se minimiza la ventana.
Emitido cuando la ventana se restaura desde un estado minimizado.
Emitido después de que la ventana haya sido redimensionada.
macos windows MacOSEmitido una vez cuando la ventana haya terminado de redicionarse.
Emitido cuando la ventana se mueve a una nueva posición.
macos windows en WindowMovedEmitido una vez cuando la ventana se mueve a una nueva posición.
Emitido cuando la ventana ingresa a un estado de pantalla completa.
Emitido cuando la ventana deja un estado de pantalla completa.
windows OnWindowdockedEmitido cuando la ventana entró en un estado atracado.
windows en WindowUncockedEmitido cuando la ventana deja un estado acoplado.
Emitió todos los eventos.
| Agregue sus contribuciones |
MIT