يتيح هذا البرنامج المساعد تطبيقات سطح المكتب Flutter لتغيير حجم النافذة وإعادة وضعها.
الإنجليزية | 简体中文
windows macos Blurwindows macoswindows القابلة للذاتwindows المتوفرةwindows رصيفwindowsmacosmacoswindows macos القابلة للتصويرmacos windowswindows قابلة للعلاجmacos windowsmacos windowslinux windowsmacos windowswindowsmacosmacosmacosmacos windowsmacos windowslinux windowslinuxlinuxmacos windowsmacos windowswindows onwindowdockedwindows onwindowundocked| Linux | ماكوس | النوافذ |
|---|---|---|
| ✔ | ✔ | ✔ |
أضف هذا إلى ملف 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 New Windows Project ، قم بتغيير ملف 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. سيؤدي ذلك أيضًا إلى منع الحدث الوثيق الذي تم تشغيله يدويًا.
يركز على النافذة.
windows macos Blurيزيل التركيز من النافذة.
windows macos إرجاع bool - ما إذا كانت النافذة مركزة.
يظهر ويركز على النافذة.
يخفي النافذة.
إرجاع bool - ما إذا كانت النافذة مرئية للمستخدم.
إرجاع bool - ما إذا كانت النافذة قد تم تعظيمها.
يزيد النافذة. vertically يحاكي Aero Snap ، يعمل فقط على Windows
غير محاصر النافذة.
إرجاع bool - ما إذا كانت النافذة تقلل من الحد الأدنى.
يقلل النافذة. على بعض المنصات ، سيتم عرض النافذة الصحيح في قفص الاتهام.
يستعيد النافذة من الحالة الصحيح إلى حالتها السابقة.
إرجاع bool - ما إذا كانت النافذة في وضع ملء الشاشة.
يحدد ما إذا كان يجب أن تكون النافذة في وضع ملء الشاشة.
windows القابلة للذات إرجاع bool - ما إذا كانت النافذة قابلة للرسو أم لا.
windows المتوفرة إرجاع bool - ما إذا كانت النافذة قد تم رستها.
windows رصيفيرتكب النافذة. يعمل فقط على Windows
windowsيزيل النافذة. يعمل فقط على Windows
هذا سيجعل نافذة تحافظ على نسبة العرض إلى الارتفاع.
يضبط لون الخلفية للنافذة.
انقل النافذة إلى موضع محاذاة مع الشاشة.
ينقل النافذة إلى وسط الشاشة.
إرجاع Rect - حدود النافذة ككائن.
تغييرات وتحريك النافذة إلى الحدود الموردة.
إرجاع Size - يحتوي على عرض النافذة وارتفاعها.
تغيير حجم النافذة إلى width height .
إرجاع Offset - يحتوي على الموضع الحالي للنافذة.
يتحرك النافذة إلى الموضع.
يحدد الحد الأدنى لحجم النافذة على width height .
يضبط الحد الأقصى لحجم النافذة على width height .
إرجاع bool - ما إذا كان يمكن تغيير النافذة يدويًا من قبل المستخدم.
يحدد ما إذا كان يمكن للمستخدم تغيير حجم النافذة يدويًا.
macos إرجاع bool - ما إذا كان يمكن للمستخدم نقل النافذة.
macosيحدد ما إذا كان يمكن للمستخدم نقل النافذة.
windows macos القابلة للتصوير إرجاع bool - ما إذا كان يمكن للمستخدم التقليل يدويًا من النافذة.
macos windowsيحدد ما إذا كان يمكن للمستخدم تقليل النافذة يدويًا.
windows قابلة للعلاج إرجاع bool - ما إذا كان يمكن للمستخدم إغلاق النافذة يدويًا.
macos windows إرجاع bool - ما إذا كان يمكن تعظيم النافذة يدويًا من قبل المستخدم.
يحدد ما إذا كان يمكن للمستخدم تعظيم النافذة يدويًا.
macos windowsيحدد ما إذا كان يمكن للمستخدم إغلاق النافذة يدويًا.
إرجاع bool - ما إذا كانت النافذة دائمًا على رأس النوافذ الأخرى.
يحدد ما إذا كان يجب أن تظهر النافذة دائمًا أعلى النوافذ الأخرى.
إرجاع bool - ما إذا كانت النافذة دائمًا أسفل النوافذ الأخرى.
linux windowsيحدد ما إذا كان يجب أن تظهر النافذة دائمًا أسفل النوافذ الأخرى.
إرجاع String - عنوان النافذة الأصلية.
يغير عنوان النافذة الأصلية إلى العنوان.
يغير نمط شريط العنوان من النافذة الأصلية.
إرجاع int - شريط العنوان من النافذة الأصلية.
إرجاع bool - ما إذا كان تخطي شريط المهام قد تم تمكينه.
يجعل النافذة لا تظهر في شريط المهام / قفص الاتهام.
macos windowsيحدد قيمة التقدم في شريط التقدم. النطاق الصحيح هو [0 ، 1.0].
windowsيضبط أيقونة نافذة/شريط المهام.
macos إرجاع bool - ما إذا كانت النافذة مرئية على جميع مساحات العمل.
macosتحدد ما إذا كان ينبغي أن تكون النافذة مرئية على جميع مساحات العمل.
ملاحظة: إذا كنت بحاجة إلى دعم سحب نافذة أعلى نافذة ملء الشاشة على شاشة أخرى ، فأنت بحاجة إلى تعديل MainFlutterwindow للوراثة من nspanel
class MainFlutterWindow : NSPanel {
// ...
} macosقم بتعيين/إلغاء التسمية على أيقونة تطبيق شريط المهام (Dock)
لاحظ أنه مطلوب لطلب الوصول إلى AppDelegate.swift مثل هذا: UnuserNotificationCenter.current (). requestAuthorization (الخيارات: [.alert ، .badge])
macos windows إرجاع bool - ما إذا كانت النافذة لديها ظل. على Windows ، تُرجع دائمًا ما لم تكن النافذة بدون إطار.
macos windowsيحدد ما إذا كان يجب أن يكون للنافذة ظل. على Windows ، لا تفعل أي شيء ما لم تكن النافذة بدون إطار.
إرجاع double - بين 0.0 (شفافة تمامًا) و 1.0 (غير شفاف بالكامل).
يضبط عتامة النافذة.
يضع سطوع النافذة.
يجعل النافذة تجاهل جميع أحداث الماوس.
حدثت جميع أحداث الماوس في هذه النافذة إلى النافذة أسفل هذه النافذة ، ولكن إذا كان لهذه النافذة التركيز ، فستظل تتلقى أحداث لوحة المفاتيح.
يبدأ سحب نافذة بناءً على حدث الماوس المحدد.
linux windowsيبدأ تغيير حجم النافذة بناءً على حدث Mouse-Down و Mouse Move المحدد.
linuxيمسك لوحة المفاتيح.
linuxunglabs لوحة المفاتيح.
المنبعثة عندما يتم إغلاق النافذة.
المنبعثة عندما تكتسب النافذة التركيز.
المنبعثة عندما تفقد النافذة التركيز.
تنبعث عندما يتم تعظيم النافذة.
المنبعثة عندما تخرج النافذة من حالة بضعف.
المنبعثة عندما يتم تقليل النافذة.
المنبعثة عندما تتم استعادة النافذة من حالة تقليلها.
المنبعثة بعد أن تم تغيير حجم النافذة.
macos windowsالمنبعثة مرة واحدة عندما تنتهي النافذة من تغيير حجمها.
المنبعثة عندما يتم نقل النافذة إلى وضع جديد.
macos windowsالمنبعث مرة واحدة عندما يتم نقل النافذة إلى موقف جديد.
المنبعثة عندما تدخل النافذة في حالة شاشة كاملة.
المنبعثة عندما تترك النافذة حالة شاشة كاملة.
windows onwindowdockedالمنبعثة عندما دخلت النافذة حالة رست.
windows onwindowundockedالمنبعثة عندما تترك النافذة حالة رست.
المنبعثة من جميع الأحداث.
| أضف مساهماتك |
معهد ماساتشوستس للتكنولوجيا