Ce plugin permet aux applications de bureau Flutter pour redimensionner et repositionner la fenêtre.
Anglais | 简体中文
windows macoswindows macos est concentréwindows Isdockablewindows Isdockedwindows de quaiwindowsmacosmacosmacos windowsmacos windowswindows Isclosablemacos windowsmacos windowslinux windowsmacos windowswindowsmacosmacosmacoswindows de Hasshadow macosmacos windowslinux windows StarTresizelinuxlinuxwindows macos résités sur onwindowwindows macos de l'onwindowmovedwindows onwindowdockedwindows en bloc| Linux | macos | Fenêtre |
|---|---|---|
| ✔️ | ✔️ | ✔️ |
Ajoutez ceci au fichier pubspec.yaml de votre package:
dependencies :
window_manager : ^0.4.2Ou
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 ());
}
Veuillez consulter l'exemple de l'application de ce plugin pour un exemple complet.
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 vous avez besoin d'utiliser la méthode Masquer, vous devez désactiver QuitOnClose .
Modifiez le fichier macos/Runner/AppDelegate.swift comme suit:
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 ();
},
),
],
);
},
);
}
}
} Modifiez le fichier linux/my_application.cc comme suit:
...
// 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));
}
...
Modifiez le fichier macos/Runner/MainFlutterWindow.swift comme suit:
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()
+ }
}
Modifiez le fichier windows/runner/win32_window.cpp comme suit:
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); Depuis Flutter 3.7 New Windows Project, modifiez le fichier windows/runner/flutter_window.cpp comme suit:
bool FlutterWindow::OnCreate() {
...
flutter_controller_->engine()->SetNextFrameCallback([&]() {
- this->Show();
+ "" //delete this->Show()
}); Assurez-vous d'appeler setState une fois sur l'événement 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
}
}
Attendez jusqu'à ce que ce soit.
Force la fermeture de la fenêtre.
Essayez de fermer la fenêtre.
Vérifiez si vous intercepte le signal de fermeture natif.
Définissez si vous interceptez le signal de fermeture natif. Peut utile lorsque vous combinez avec l'écouteur d'événements OnClose. Cela empêchera également l'événement proche déclenché manuellement.
Se concentre sur la fenêtre.
windows macosSupprime la mise au point de la fenêtre.
windows macos est concentré Renvoie bool - si la fenêtre est concentrée.
Montre et met l'accent sur la fenêtre.
Cache la fenêtre.
Renvoie bool - si la fenêtre est visible pour l'utilisateur.
Renvoie bool - si la fenêtre est maximisée.
Maximise la fenêtre. simule vertically Aero Snap, ne fonctionne que sous Windows
Démacimer la fenêtre.
Renvoie bool - si la fenêtre est minimisée.
Minimise la fenêtre. Sur certaines plates-formes, la fenêtre minimisée sera affichée sur le quai.
Restaure la fenêtre de l'état minimisée à son état précédent.
Renvoie bool - si la fenêtre est en mode plein écran.
Définit si la fenêtre doit être en mode plein écran.
windows Isdockable Renvoie bool - que la fenêtre soit dockable ou non.
windows Isdocked Renvoie bool - si la fenêtre est amarrée.
windows de quaiDocute la fenêtre. Fonctionne uniquement sur Windows
windowsDésactive la fenêtre. Fonctionne uniquement sur Windows
Cela fera que la fenêtre maintiendra un rapport d'aspect.
Définit la couleur d'arrière-plan de la fenêtre.
Déplacez la fenêtre vers une position alignée avec l'écran.
Déplace la fenêtre au centre de l'écran.
Renvoie Rect - les limites de la fenêtre en tant qu'objet.
Redimensionne et déplace la fenêtre vers les limites fournies.
Size des rendements - contient la largeur et la hauteur de la fenêtre.
Redimensionne la fenêtre à width et à height .
Renvoie Offset - contient la position actuelle de la fenêtre.
Déplace la fenêtre pour positionner.
Définit la taille minimale de la fenêtre sur width et height .
Définit la taille maximale de la fenêtre sur width et height .
Renvoie bool - si la fenêtre peut être redimensionnée manuellement par l'utilisateur.
Définit si la fenêtre peut être redimensionnée manuellement par l'utilisateur.
macos Renvoie bool - si la fenêtre peut être déplacée par l'utilisateur.
macosDéfinit si la fenêtre peut être déplacée par l'utilisateur.
macos windows Renvoie bool - si la fenêtre peut être minimisé manuellement par l'utilisateur.
macos windowsDéfinit si la fenêtre peut être minimisée manuellement par l'utilisateur.
windows Isclosable Renvoie bool - si la fenêtre peut être fermée manuellement par l'utilisateur.
macos windows Renvoie bool - si la fenêtre peut être maximisée manuellement par l'utilisateur.
Définit si la fenêtre peut être maximisée manuellement par l'utilisateur.
macos windowsDéfinit si la fenêtre peut être fermée manuellement par l'utilisateur.
Renvoie bool - si la fenêtre est toujours au-dessus des autres fenêtres.
Définit si la fenêtre doit s'afficher toujours au-dessus des autres fenêtres.
Renvoie bool - si la fenêtre est toujours en dessous des autres fenêtres.
linux windowsDéfinit si la fenêtre doit s'afficher toujours sous les autres fenêtres.
Renvoie String - le titre de la fenêtre native.
Modifie le titre de la fenêtre native en titre.
Modifie le style de barre de titre de la fenêtre native.
Renvoie int - la hauteur de la barre de titre de la fenêtre native.
Renvoie bool - si la barre des tâches est activée.
Fait que la fenêtre ne s'affiche pas dans la barre des tâches / dock.
macos windowsDéfinit la valeur de progression de la barre de progression. La plage valide est [0, 1.0].
windowsDéfinit l'icône de fenêtre / barre des tâches.
macos Renvoie bool - si la fenêtre est visible sur tous les espaces de travail.
macosDéfinit si la fenêtre doit être visible sur tous les espaces de travail.
Remarque: Si vous devez prendre en charge la glissement d'une fenêtre sur le dessus d'une fenêtre en plein écran sur un autre écran, vous devez modifier MAINFLURTWINDOW pour hériter de NSPanel
class MainFlutterWindow : NSPanel {
// ...
} macosDéfinir / unset Label sur l'icône de l'application Taskbar (Dock)
Notez qu'il est nécessaire de demander l'accès sur votre appdelegate.swift comme ceci: unserertificationCenter.current (). RequestAuthorization (Options: [.Alert, .badge]))
windows de Hasshadow macos Renvoie bool - si la fenêtre a une ombre. Sur Windows, renvoie toujours vrai à moins que la fenêtre ne soit sans cadre.
macos windowsDéfinit si la fenêtre doit avoir une ombre. Sur Windows, ne fait rien à moins que la fenêtre ne soit sans cadre.
Renvoie double - entre 0,0 (entièrement transparent) et 1,0 (entièrement opaque).
Définit l'opacité de la fenêtre.
Définit la luminosité de la fenêtre.
Fait que la fenêtre ignore tous les événements de la souris.
Tous les événements de la souris se sont produits dans cette fenêtre seront transmis à la fenêtre sous cette fenêtre, mais si cette fenêtre a une mise au point, elle recevra toujours des événements de clavier.
Démarre une traînée de fenêtre en fonction de l'événement de souris spécifié.
linux windows StarTresizeDémarre un redimensionnement de fenêtre en fonction de l'événement de souris et de mouvement de souris spécifié.
linuxAttrape le clavier.
linuxDéconnu le clavier.
Émis lorsque la fenêtre va être fermée.
Émis lorsque la fenêtre s'accumule.
Émis lorsque la fenêtre perd la focalisation.
Émis lorsque la fenêtre est maximisée.
Émis lorsque la fenêtre sort d'un état maximisé.
Émis lorsque la fenêtre est minimisée.
Émis lorsque la fenêtre est restaurée à partir d'un état minimisée.
Émis après la redimension de la fenêtre.
windows macos résités sur onwindowÉmis une fois lorsque la fenêtre a fini de redimensionner.
Émis lorsque la fenêtre est déplacée vers un nouveau poste.
windows macos de l'onwindowmovedÉmis une fois lorsque la fenêtre est déplacée vers une nouvelle position.
Émis lorsque la fenêtre entre dans un état complet.
Émis lorsque la fenêtre quitte un état plein écran.
windows onwindowdockedÉmis lorsque la fenêtre a entré un état amarré.
windows en blocÉmis lorsque la fenêtre quitte un état amarré.
A émis tous les événements.
| Ajoutez vos contributions |
Mit