Mit diesem Plugin können Flutter -Desktop -Apps die Größe und Neupositionierung des Fensters ändern.
Englisch | 简体中文
macos windowsmacos windowswindowswindowswindowswindows ausfindigmacosmacosmacos windowsmacos windowswindowsmacos windowsmacos windowslinux windowsmacos windowswindowsmacosmacosmacosmacos windowsmacos windowslinux windowslinuxlinuxmacos windowsmacos windowswindowswindows| Linux | macos | Fenster |
|---|---|---|
| ✔️ | ✔️ | ✔️ |
Fügen Sie dies in die pubspec.yaml -Datei Ihres Pakets hinzu:
dependencies :
window_manager : ^0.4.2Oder
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 ());
}
In der Beispiel -App dieses Plugins finden Sie ein vollständiges Beispiel.
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
}
} Wenn Sie die Methode aus der Hide verwenden müssen, müssen Sie QuitOnClose deaktivieren.
Ändern Sie die Datei macos/Runner/AppDelegate.swift wie folgt:
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 ();
},
),
],
);
},
);
}
}
} Ändern Sie die Datei linux/my_application.cc wie folgt:
...
// 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));
}
...
Ändern Sie die Datei macos/Runner/MainFlutterWindow.swift wie folgt:
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()
+ }
}
Ändern Sie die Datei windows/runner/win32_window.cpp wie folgt:
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); Seit Flutter 3.7 Neue Windows -Projekt ändern die Datei windows/runner/flutter_window.cpp wie folgt:
bool FlutterWindow::OnCreate() {
...
flutter_controller_->engine()->SetNextFrameCallback([&]() {
- this->Show();
+ "" //delete this->Show()
}); Stellen Sie sicher, dass Sie setState einmal auf dem onWindowFocus -Ereignis anrufen.
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
}
}
Warten Sie, bis Sie bereit sind zu zeigen.
Zwingen, das Fenster zu schließen.
Versuchen Sie, das Fenster zu schließen.
Überprüfen Sie, ob das native Schließsignal abfängt.
Setzen Sie, wenn Sie das native Nahsignal abfangen. Kann nützlich, wenn Sie sich mit dem Onclose -Event -Listener kombinieren. Dies verhindert auch das manuell ausgelöste enge Ereignis.
Konzentriert sich auf das Fenster.
macos windowsEntfernt den Fokus aus dem Fenster.
macos windows Rückgabe bool - ob das Fenster fokussiert ist.
Zeigt und gibt den Fokus auf das Fenster.
Versteckt das Fenster.
Gibt bool zurück - ob das Fenster für den Benutzer sichtbar ist.
Rückgabe bool - ob das Fenster maximiert wird.
Maximiert das Fenster. vertically simuliert Aero Snap, funktioniert nur unter Windows
Das Fenster nicht ausversehrt.
Rückgabe bool - ob das Fenster minimiert ist.
Minimiert das Fenster. Auf einigen Plattformen wird das minimierte Fenster im Dock angezeigt.
Stellt das Fenster vom minimierten Zustand in seinen vorherigen Zustand wieder her.
Gibt bool zurück - ob sich das Fenster im Vollbildmodus befindet.
Legt fest, ob sich das Fenster im Vollbildmodus befinden sollte.
windows Gibt bool zurück - ob das Fenster angedockbar ist oder nicht.
windows Gibt bool zurück - ob das Fenster angedockt ist.
windowsDockt das Fenster. funktioniert nur unter Windows
windows ausfindigDas Fenster abfällt. funktioniert nur unter Windows
Dadurch wird ein Fenster ein Seitenverhältnis beibehalten.
Legt die Hintergrundfarbe des Fensters fest.
Bewegen Sie das Fenster in eine Position, die mit dem Bildschirm ausgerichtet ist.
Bewegen Sie das Fenster in die Mitte des Bildschirms.
Gibt Rect zurück - die Grenzen des Fensters als Objekt.
Größen Sie die Größenordnung und bewegt das Fenster zu den mitgelieferten Grenzen.
Size - enthält die Breite und Höhe des Fensters.
Gröbt das Fenster auf width und height .
Offset - Enthält die aktuelle Position des Fensters.
Bewegt das Fenster in Position.
Legt die Mindestgröße des Fensters auf width und height fest.
Legt die maximale Fenstergröße auf width und height fest.
Gibt bool zurück - ob das Fenster vom Benutzer manuell geändert werden kann.
Legt fest, ob das Fenster vom Benutzer manuell geändert werden kann.
macos Gibt bool zurück - ob das Fenster vom Benutzer verschoben werden kann.
macosLegt fest, ob das Fenster vom Benutzer verschoben werden kann.
macos windows Gibt bool zurück - ob das Fenster vom Benutzer manuell minimiert werden kann.
macos windowsLegt fest, ob das Fenster vom Benutzer manuell minimiert werden kann.
windows Gibt bool zurück - ob das Fenster vom Benutzer manuell geschlossen werden kann.
macos windows Gibt bool zurück - ob das Fenster vom Benutzer manuell maximiert werden kann.
Legt fest, ob das Fenster vom Benutzer manuell maximiert werden kann.
macos windowsLegt fest, ob das Fenster vom Benutzer manuell geschlossen werden kann.
Gibt bool zurück - ob sich das Fenster immer über anderen Fenstern befindet.
Legt fest, ob das Fenster immer auf anderen Fenstern angezeigt werden soll.
Gibt bool zurück - ob das Fenster immer unter anderen Fenstern liegt.
linux windowsLegt fest, ob das Fenster immer unter anderen Fenstern angezeigt werden soll.
Gibt String zurück - Der Titel des nativen Fensters.
Ändert den Titel des nativen Fensters in den Titel.
Ändert den Titelbalkenstil des nativen Fensters.
Gibt int zurück - die Titelbalkenhöhe des nativen Fensters.
Gibt bool zurück - ob die Taskleiste über das Überspringen der Taskleiste aktiviert ist.
Erstellt das Fenster nicht in der Taskleiste / Dock.
macos windowsLegt den Fortschrittswert in Bearbeitung fest. Der gültige Bereich beträgt [0, 1.0].
windowsLegt Fenster/Taskleisten -Symbol fest.
macos Rückgabe bool - ob das Fenster in allen Arbeitsbereichen sichtbar ist.
macosLegt fest, ob das Fenster in allen Arbeitsbereichen sichtbar sein sollte.
Hinweis: Wenn Sie das Ziehen eines Fensters über ein Vollbildfenster auf einem anderen Bildschirm unterstützen müssen, müssen Sie den MainflutterWindow so ändern, dass sie von NSpanel erben
class MainFlutterWindow : NSPanel {
// ...
} macosSetzen/Nicht -Set -Etikett auf Taskleisten -App -App -Symbol (DOCK)
Beachten Sie, dass es erforderlich ist, den Zugriff auf Ihr AppDelegate zu fordern.
macos windows Gibt bool zurück - ob das Fenster einen Schatten hat. Bei Windows gibt es immer true zurück, es sei denn, das Fenster ist rahmenlos.
macos windowsLegt fest, ob das Fenster einen Schatten haben sollte. Tun Sie unter Windows nichts, es sei denn, das Fenster ist rahmenlos.
Gibt double - zwischen 0,0 (vollständig transparent) und 1,0 (vollständig undurchsichtig) zurück.
Legt die Deckkraft des Fensters fest.
Legt die Helligkeit des Fensters fest.
Lässt das Fenster alle Mausereignisse ignorieren.
Alle Mausereignisse in diesem Fenster werden an das Fenster unterhalb dieses Fensters übergeben. Wenn dieses Fenster jedoch den Fokus hat, erhält es weiterhin Tastaturereignisse.
Startet ein Fenster-Ziehen basierend auf dem angegebenen Maus-Down-Ereignis.
linux windowsStartet eine Fenster-Größe, die auf dem angegebenen Ereignis von Maus-Down & Mouse-Move basiert.
linuxSchnappt sich die Tastatur.
linuxDie Tastatur angrab.
Emittiert, wenn das Fenster geschlossen wird.
Emittiert, wenn das Fenster fokussiert wird.
Emittiert, wenn das Fenster den Fokus verliert.
Emittiert, wenn das Fenster maximiert wird.
Emittiert, wenn das Fenster aus einem maximierten Zustand ausgeht.
Emittiert, wenn das Fenster minimiert wird.
Emittiert, wenn das Fenster von einem minimierten Zustand wiederhergestellt wird.
Nach dem Fenster wurde die Änderung des Fensters emittiert.
macos windowsEinmal emittiert, wenn das Fenster zu Ende wurde.
Emittiert, wenn das Fenster in eine neue Position verschoben wird.
macos windowsEinmal emittiert, wenn das Fenster in eine neue Position verschoben wird.
Emittiert, wenn das Fenster in einen Vollbildstatus eingeht.
Emittiert, wenn das Fenster einen Vollbildstatus hinterlässt.
windowsEmittiert, als das Fenster einen angedockten Zustand eingab.
windowsEmittiert, wenn das Fenster einen angedockten Zustand hinterlässt.
Alle Ereignisse emittiert.
| Fügen Sie Ihre Beiträge hinzu |
MIT