ปลั๊กอินนี้ช่วยให้แอพเดสก์ท็อปกระพือสามารถปรับขนาดและปรับตำแหน่งหน้าต่างได้
ภาษาอังกฤษ | 简体中文
macos windowswindows macos ที่เน้นwindows Isdockablewindows isdockedwindowswindowsmacos isMovablemacos ที่ได้รับการเคลื่อนไหวwindows macos ที่ไม่น่าจะเป็นmacos windowswindows isclosablewindows macosmacos windowslinux windowsmacos windowswindowsmacosmacosmacosmacos windowsmacos windowslinux windows Startresizinglinux บอร์ด grabkeyboardlinuxwindows macoswindows macoswindowswindows OnWindowundocked| ลินเวกซ์ | แม็กอส | หน้าต่าง |
|---|---|---|
เพิ่มสิ่งนี้ลงในไฟล์ pubspec.yaml ของแพ็คเกจของคุณ:
dependencies :
window_manager : ^0.4.2หรือ
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 ());
}
โปรดดูแอพตัวอย่างของปลั๊กอินนี้สำหรับตัวอย่างเต็มรูปแบบ
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
}
} หากคุณต้องการใช้วิธีซ่อนคุณจะต้องปิดการใช้ QuitOnClose
เปลี่ยนไฟล์ macos/Runner/AppDelegate.swift ดังนี้:
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 ();
},
),
],
);
},
);
}
}
} เปลี่ยนไฟล์ linux/my_application.cc ดังนี้:
...
// 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));
}
...
เปลี่ยนไฟล์ macos/Runner/MainFlutterWindow.swift ดังนี้:
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()
+ }
}
เปลี่ยนไฟล์ windows/runner/win32_window.cpp ดังนี้:
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); เนื่องจาก Flutter 3.7 โครงการ Windows ใหม่เปลี่ยนไฟล์ windows/runner/flutter_window.cpp ดังต่อไปนี้:
bool FlutterWindow::OnCreate() {
...
flutter_controller_->engine()->SetNextFrameCallback([&]() {
- this->Show();
+ "" //delete this->Show()
}); ตรวจสอบให้แน่ใจว่าได้โทร setState หนึ่งครั้งในเหตุการณ์ 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
}
}
รอจนกว่าจะพร้อมที่จะแสดง
บังคับให้ปิดหน้าต่าง
พยายามปิดหน้าต่าง
ตรวจสอบว่ากำลังสกัดกั้นสัญญาณปิดดั้งเดิมหรือไม่
ตั้งค่าหากสกัดกั้นสัญญาณปิดดั้งเดิม อาจมีประโยชน์เมื่อรวมกับผู้ฟังเหตุการณ์ onClose สิ่งนี้จะป้องกันเหตุการณ์ที่ใกล้ชิดด้วยตนเอง
มุ่งเน้นไปที่หน้าต่าง
macos windowsลบโฟกัสจากหน้าต่าง
windows macos ที่เน้น ส่งคืน bool - ไม่ว่าจะเป็นหน้าต่างหรือไม่
แสดงและให้ความสำคัญกับหน้าต่าง
ซ่อนหน้าต่าง
ส่งคืน bool - ผู้ใช้มองเห็นหน้าต่างหรือไม่
ส่งคืน bool - ไม่ว่าจะเป็นหน้าต่างสูงสุดหรือไม่
เพิ่มหน้าต่างให้สูงสุด เลียนแบบ Aero Snap ใน vertically ใช้งานได้เฉพาะบนหน้าต่าง
ปลดออกจากหน้าต่าง
ส่งคืน bool - ไม่ว่าจะลดหน้าต่างหรือไม่
ลดหน้าต่างให้น้อยที่สุด ในบางแพลตฟอร์มหน้าต่างย่อเล็กสุดจะแสดงในท่าเรือ
คืนค่าหน้าต่างจากสถานะที่ย่อให้เล็กที่สุดไปสู่สถานะก่อนหน้า
ส่งคืน bool - หน้าต่างอยู่ในโหมดเต็มหน้าจอหรือไม่
ตั้งค่าว่าหน้าต่างควรอยู่ในโหมดเต็มหน้าจอหรือไม่
windows Isdockable ส่งคืน bool - ไม่ว่าจะเป็นหน้าต่างที่เทียบได้หรือไม่
windows isdocked ส่งคืน bool - ไม่ว่าจะเป็นหน้าต่าง
windowsเชื่อมต่อหน้าต่าง ใช้งานได้เฉพาะกับ Windows
windowsปลดออกจากหน้าต่าง ใช้งานได้เฉพาะกับ Windows
สิ่งนี้จะทำให้หน้าต่างรักษาอัตราส่วนภาพ
ตั้งค่าสีพื้นหลังของหน้าต่าง
เลื่อนหน้าต่างไปยังตำแหน่งที่จัดตำแหน่งกับหน้าจอ
ย้ายหน้าต่างไปที่กึ่งกลางของหน้าจอ
ส่งคืน Rect - ขอบเขตของหน้าต่างเป็นวัตถุ
ปรับขนาดและเลื่อนหน้าต่างไปยังขอบเขตที่ให้มา
ส่งคืน Size - มีความกว้างและความสูงของหน้าต่าง
ปรับขนาดหน้าต่างให้ width และ height
คืน Offset - มีตำแหน่งปัจจุบันของหน้าต่าง
ย้ายหน้าต่างไปยังตำแหน่ง
ตั้งค่าขนาดต่ำสุดของหน้าต่างเป็น width และ height
ตั้งค่าขนาดสูงสุดของหน้าต่างเป็น width และ height
ส่งคืน bool - ผู้ใช้สามารถปรับขนาดหน้าต่างด้วยตนเองได้หรือไม่
ตั้งค่าว่าผู้ใช้สามารถปรับขนาดหน้าต่างด้วยตนเองได้หรือไม่
macos isMovable ส่งคืน bool - ผู้ใช้สามารถเคลื่อนย้ายหน้าต่างได้หรือไม่
macos ที่ได้รับการเคลื่อนไหวตั้งค่าว่าผู้ใช้สามารถเคลื่อนย้ายหน้าต่างได้หรือไม่
windows macos ที่ไม่น่าจะเป็น ส่งคืน bool - ผู้ใช้สามารถย่อขนาดได้ด้วยตนเองหรือไม่
macos windowsตั้งค่าว่าหน้าต่างสามารถย่อเล็กสุดโดยผู้ใช้ได้หรือไม่
windows isclosable ส่งคืน bool - ผู้ใช้สามารถปิดหน้าต่างด้วยตนเองได้หรือไม่
windows macos ส่งคืน bool - ผู้ใช้สามารถขยายด้วยตนเองได้หรือไม่
ตั้งค่าว่าผู้ใช้สามารถขยายหน้าต่างด้วยตนเองได้หรือไม่
macos windowsตั้งค่าว่าผู้ใช้สามารถปิดหน้าต่างด้วยตนเองได้หรือไม่
ส่งคืน bool - หน้าต่างอยู่ด้านบนของหน้าต่างอื่น ๆ เสมอหรือไม่
ตั้งค่าว่าหน้าต่างควรแสดงอยู่ด้านบนของหน้าต่างอื่น ๆ เสมอหรือไม่
ส่งคืน bool - ไม่ว่าหน้าต่างจะอยู่ใต้หน้าต่างอื่น ๆ เสมอหรือไม่
linux windowsตั้งค่าว่าหน้าต่างควรแสดงด้านล่างหน้าต่างอื่น ๆ เสมอหรือไม่
ส่งคืน String - ชื่อของหน้าต่างพื้นเมือง
เปลี่ยนชื่อของหน้าต่างพื้นเมืองเป็นชื่อ
เปลี่ยนรูปแบบแถบชื่อเรื่องของหน้าต่างพื้นเมือง
ส่งคืน int - ความสูงของแถบชื่อเรื่องของหน้าต่างพื้นเมือง
ส่งคืน bool - เปิดใช้งานแถบงานข้ามหรือไม่
ทำให้หน้าต่างไม่แสดงในแถบงาน / ท่าเรือ
macos windowsตั้งค่าความคืบหน้ามูลค่าในแถบความคืบหน้า ช่วงที่ถูกต้องคือ [0, 1.0]
windowsตั้งค่าไอคอนหน้าต่าง/บาร์
macos ส่งคืน bool - ไม่ว่าจะมองเห็นหน้าต่างในพื้นที่ทำงานทั้งหมดหรือไม่
macosตั้งค่าว่าหน้าต่างควรมองเห็นได้ในพื้นที่ทำงานทั้งหมดหรือไม่
หมายเหตุ: หากคุณต้องการรองรับการลากหน้าต่างที่ด้านบนของหน้าต่างเต็มหน้าจอบนหน้าจออื่นคุณต้องปรับเปลี่ยน MainflutterWindow เพื่อสืบทอดจาก NSpanel
class MainFlutterWindow : NSPanel {
// ...
} macosSET/UNSET LABLE บนไอคอนแอป TaskBar (DOCK)
โปรดทราบว่าจำเป็นต้องขอการเข้าถึงที่ appdelegate.swift เช่นนี้: unusernotificationcenter.current (). Requestauthorization (ตัวเลือก: [.alert, .badge])
macos windows ส่งคืน bool - หน้าต่างมีเงาหรือไม่ บน Windows จะส่งคืนจริงเสมอเว้นแต่หน้าต่างจะไม่มีกรอบ
macos windowsตั้งค่าว่าหน้าต่างควรมีเงาหรือไม่ บน Windows ไม่ได้ทำอะไรเลยเว้นแต่หน้าต่างจะไม่มีกรอบ
ส่งคืน double - ระหว่าง 0.0 (โปร่งใสอย่างเต็มที่) และ 1.0 (ทึบแสงเต็ม)
ตั้งค่าความทึบของหน้าต่าง
ตั้งค่าความสว่างของหน้าต่าง
ทำให้หน้าต่างละเว้นเหตุการณ์เมาส์ทั้งหมด
เหตุการณ์เมาส์ทั้งหมดที่เกิดขึ้นในหน้าต่างนี้จะถูกส่งผ่านไปยังหน้าต่างด้านล่างหน้าต่างนี้ แต่ถ้าหน้าต่างนี้มีโฟกัสมันจะยังคงได้รับกิจกรรมแป้นพิมพ์
เริ่มการลากหน้าต่างตามเหตุการณ์เมาส์ที่ระบุ
linux windows Startresizingเริ่มการปรับขนาดหน้าต่างตามเหตุการณ์เมาส์และเมาส์ที่ระบุ
linux บอร์ด grabkeyboardคว้าแป้นพิมพ์
linuxปลดคีย์บอร์ด
ปล่อยออกมาเมื่อหน้าต่างจะถูกปิด
ปล่อยออกมาเมื่อหน้าต่างได้รับโฟกัส
ปล่อยออกมาเมื่อหน้าต่างสูญเสียโฟกัส
ปล่อยออกมาเมื่อหน้าต่างถูกขยายให้ใหญ่สุด
ปล่อยออกมาเมื่อหน้าต่างออกจากสถานะสูงสุด
ปล่อยออกมาเมื่อหน้าต่างลดลง
ปล่อยออกมาเมื่อหน้าต่างได้รับการกู้คืนจากสถานะย่อ
ปล่อยออกมาหลังจากหน้าต่างได้รับการปรับขนาด
windows macosปล่อยออกมาหนึ่งครั้งเมื่อหน้าต่างได้รับการปรับขนาดเสร็จแล้ว
ปล่อยออกมาเมื่อหน้าต่างถูกย้ายไปยังตำแหน่งใหม่
windows macosปล่อยออกมาหนึ่งครั้งเมื่อหน้าต่างถูกย้ายไปยังตำแหน่งใหม่
ปล่อยออกมาเมื่อหน้าต่างเข้าสู่สถานะเต็มหน้าจอ
ปล่อยออกมาเมื่อหน้าต่างออกจากสถานะเต็มหน้าจอ
windowsปล่อยออกมาเมื่อหน้าต่างเข้าสู่สถานะเชื่อมต่อ
windows OnWindowundockedปล่อยออกมาเมื่อหน้าต่างออกจากสถานะเชื่อมต่อ
ปล่อยเหตุการณ์ทั้งหมด
| เพิ่มการมีส่วนร่วมของคุณ |
มิกซ์