Plugin ini memungkinkan aplikasi desktop flutter untuk mengubah ukuran dan memposisikan ulang jendela.
Bahasa Inggris | 简体中文
windows macos yang blurwindows macos yang Disfokuswindows yang bisa diterapkanwindows terisakwindows Dockwindowsmacos yang bisa ditekukmacoswindows macos isMinimizablemacos windowswindows yang dapat diterjemahkanwindows macos Ismaximizablemacos windowslinux windowsmacos windowswindows Seticonmacosmacosmacoswindows macos Hasshadowmacos windowslinux windowslinuxlinuxmacos windowswindows macoswindowswindows| Linux | MacOS | Windows |
|---|---|---|
| ✔️ | ✔️ | ✔️ |
Tambahkan ini ke file pubspec.yaml paket Anda:
dependencies :
window_manager : ^0.4.2Atau
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 ());
}
Silakan lihat contoh aplikasi plugin ini untuk contoh lengkap.
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
}
} Jika Anda perlu menggunakan metode Sembunyikan, Anda perlu menonaktifkan QuitOnClose .
Ubah file macos/Runner/AppDelegate.swift sebagai berikut:
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 ();
},
),
],
);
},
);
}
}
} Ubah file linux/my_application.cc sebagai berikut:
...
// 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));
}
...
Ubah file macos/Runner/MainFlutterWindow.swift sebagai berikut:
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()
+ }
}
Ubah file windows/runner/win32_window.cpp sebagai berikut:
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); Sejak Flutter 3.7 Proyek Windows Baru Ubah File windows/runner/flutter_window.cpp sebagai berikut:
bool FlutterWindow::OnCreate() {
...
flutter_controller_->engine()->SetNextFrameCallback([&]() {
- this->Show();
+ "" //delete this->Show()
}); Pastikan untuk menelepon setState sekali di acara 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
}
}
Tunggu sampai siap untuk ditampilkan.
Memaksa menutup jendela.
Cobalah untuk menutup jendela.
Periksa apakah mencegat sinyal dekat asli.
Atur jika mencegat sinyal dekat asli. Mungkin berguna saat bergabung dengan pendengar acara OnClose. Ini juga akan mencegah peristiwa dekat yang dipicu secara manual.
Berfokus pada jendela.
windows macos yang blurMenghapus fokus dari jendela.
windows macos yang Disfokus Returns bool - apakah jendela difokuskan.
Menunjukkan dan memberikan fokus ke jendela.
Menyembunyikan jendela.
Mengembalikan bool - apakah jendela terlihat oleh pengguna.
Returns bool - apakah jendela dimaksimalkan.
Memaksimalkan jendela. vertically mensimulasikan snap aero, hanya berfungsi di windows
Tidak memaksimalkan jendela.
Returns bool - apakah jendela diminimalkan.
Meminimalkan jendela. Pada beberapa platform, jendela yang diminimalkan akan ditampilkan di dermaga.
Mengembalikan jendela dari keadaan yang diminimalkan ke keadaan sebelumnya.
Returns bool - Apakah jendela dalam mode layar penuh.
Menetapkan apakah jendela harus dalam mode layar penuh.
windows yang bisa diterapkan Mengembalikan bool - apakah jendela itu bisa dermaga atau tidak.
windows terisak Returns bool - apakah jendela itu merapat.
windows DockDocks the Window. hanya berfungsi di windows
windowsMengurangi jendela. hanya berfungsi di windows
Ini akan membuat jendela mempertahankan rasio aspek.
Mengatur warna latar belakang jendela.
Pindahkan jendela ke posisi yang selaras dengan layar.
Pindahkan jendela ke tengah layar.
Mengembalikan Rect - Batas jendela sebagai objek.
Mengubah ukuran dan memindahkan jendela ke batas yang disediakan.
Size pengembalian - berisi lebar dan tinggi jendela.
Ubah ukuran jendela menjadi width dan height .
Returns Offset - Berisi posisi jendela saat ini.
Memindahkan jendela ke posisi.
Mengatur ukuran minimum jendela ke width dan height .
Mengatur ukuran maksimum jendela ke width dan height .
Returns bool - Apakah jendela dapat diubah ukurannya secara manual oleh pengguna.
Menetapkan apakah jendela dapat diubah ukurannya secara manual oleh pengguna.
macos yang bisa ditekuk Returns bool - Apakah jendela dapat dipindahkan oleh pengguna.
macosMenetapkan apakah jendela dapat dipindahkan oleh pengguna.
windows macos isMinimizable Returns bool - Apakah jendela dapat diminimalkan secara manual oleh pengguna.
macos windowsMenetapkan apakah jendela dapat diminimalkan secara manual oleh pengguna.
windows yang dapat diterjemahkan Returns bool - Apakah jendela dapat ditutup secara manual oleh pengguna.
windows macos Ismaximizable Returns bool - Apakah jendela dapat dimaksimalkan secara manual oleh pengguna.
Menetapkan apakah jendela dapat dimaksimalkan secara manual oleh pengguna.
macos windowsMenetapkan apakah jendela dapat ditutup secara manual oleh pengguna.
Returns bool - Apakah jendela selalu di atas jendela lain.
Menetapkan apakah jendela harus selalu ditampilkan di atas jendela lain.
Returns bool - Apakah jendela selalu di bawah jendela lainnya.
linux windowsMenetapkan apakah jendela harus ditampilkan selalu di bawah jendela lain.
Mengembalikan String - judul jendela asli.
Mengubah judul jendela asli menjadi judul.
Mengubah gaya judul batang jendela asli.
Returns int - Tinggi bilah judul jendela asli.
Returns bool - apakah melewatkan bilah tugas diaktifkan.
Membuat jendela tidak ditampilkan di bilah tugas / dermaga.
macos windowsMenetapkan nilai kemajuan dalam proses kemajuan. Rentang yang valid adalah [0, 1.0].
windows SeticonMenetapkan ikon Window/Taskbar.
macos Returns bool - Apakah jendela terlihat di semua ruang kerja.
macosMenetapkan apakah jendela harus terlihat di semua ruang kerja.
Catatan: Jika Anda perlu mendukung menyeret jendela di atas jendela layar penuh di layar lain, Anda perlu memodifikasi MainflutterWindow untuk mewarisi dari NSPANEL
class MainFlutterWindow : NSPanel {
// ...
} macosAtur/label yang tidak diatur di ikon aplikasi TaskBar (Dock)
Perhatikan bahwa diperlukan untuk meminta akses di appdelegate Anda.
windows macos Hasshadow Returns bool - apakah jendela memiliki bayangan. Di Windows, selalu kembali true kecuali jendela tanpa bingkai.
macos windowsMenetapkan apakah jendela harus memiliki bayangan. Di windows, tidak melakukan apa pun kecuali Window tidak berbingkai.
Mengembalikan double - antara 0,0 (sepenuhnya transparan) dan 1.0 (sepenuhnya buram).
Mengatur opacity jendela.
Mengatur kecerahan jendela.
Membuat jendela mengabaikan semua acara mouse.
Semua peristiwa mouse terjadi di jendela ini akan diteruskan ke jendela di bawah jendela ini, tetapi jika jendela ini memiliki fokus, itu masih akan menerima acara keyboard.
Mulai drag jendela berdasarkan acara mouse-down yang ditentukan.
linux windowsMulai ukuran jendela berdasarkan acara mouse-down & mouse-mouse yang ditentukan.
linuxAmbil keyboard.
linuxUngrab keyboard.
Dipancarkan saat jendela akan ditutup.
Dipancarkan saat jendela mendapatkan fokus.
Dipancarkan saat jendela kehilangan fokus.
Dipancarkan saat jendela dimaksimalkan.
Dipancarkan saat jendela keluar dari keadaan maksimal.
Dipancarkan saat jendela diminimalkan.
Dipancarkan saat jendela dipulihkan dari keadaan yang diminimalkan.
Dipancarkan setelah jendela diubah ukurannya.
macos windowsDipancarkan sekali ketika jendela selesai diubah ukurannya.
Dipancarkan saat jendela dipindahkan ke posisi baru.
windows macosDipancarkan sekali ketika jendela dipindahkan ke posisi baru.
Dipancarkan saat jendela memasuki keadaan layar penuh.
Dipancarkan saat jendela meninggalkan keadaan layar penuh.
windowsDipancarkan saat jendela memasuki keadaan berlabuh.
windowsDipancarkan saat jendela meninggalkan keadaan berlabuh.
Memancarkan semua acara.
| Tambahkan kontribusi Anda |
Mit