@@ -2,6 +2,7 @@ import 'dart:io';
22import 'package:flutter/services.dart' ;
33import 'package:flutter/foundation.dart' ;
44import 'package:window_manager/window_manager.dart' ;
5+ import 'package:screen_retriever/screen_retriever.dart' ;
56import 'package:device_info_plus/device_info_plus.dart' ;
67import 'package:auto_orientation_v2/auto_orientation_v2.dart' ;
78
@@ -17,6 +18,36 @@ Future<void> landScape() async {
1718 await windowManager.setHasShadow (false ); // 去掉阴影
1819 await windowManager.setAsFrameless (); // 设置为无边框模式
1920 await windowManager.setFullScreen (true );
21+ // 1. 獲取目前視窗的中心點
22+ Rect windowRect = await windowManager.getBounds ();
23+ Offset center = windowRect.center;
24+
25+ // 2. 獲取所有顯示器
26+ List <Display > displays = await screenRetriever.getAllDisplays ();
27+
28+ // 3. 尋找視窗中心點在哪個顯示器範圍內
29+ Display currentDisplay = displays.firstWhere ((display) {
30+ // 注意:這裡使用 visiblePosition 或 bounds.topLeft
31+ final Offset origin = display.visiblePosition ?? Offset .zero;
32+ final Size size = display.size;
33+
34+ return center.dx >= origin.dx &&
35+ center.dx <= origin.dx + size.width &&
36+ center.dy >= origin.dy &&
37+ center.dy <= origin.dy + size.height;
38+ }, orElse: () => displays.first);
39+
40+ // 4. 根據找到的螢幕設定全螢幕範圍
41+ await windowManager.setBounds (
42+ Rect .fromLTWH (
43+ currentDisplay.visiblePosition! .dx,
44+ currentDisplay.visiblePosition! .dy,
45+ currentDisplay.size.width,
46+ currentDisplay.size.height,
47+ ),
48+ );
49+
50+ await windowManager.setAlwaysOnTop (true );
2051 }
2152 } catch (exception, stacktrace) {
2253 debugPrint (exception.toString ());
@@ -36,6 +67,35 @@ Future<void> doEnterFullScreen() async {
3667 await windowManager.setHasShadow (false ); // 去掉阴影
3768 await windowManager.setAsFrameless (); // 设置为无边框模式
3869 await windowManager.setFullScreen (true );
70+ // 1. 獲取目前視窗的中心點
71+ Rect windowRect = await windowManager.getBounds ();
72+ Offset center = windowRect.center;
73+
74+ // 2. 獲取所有顯示器
75+ List <Display > displays = await screenRetriever.getAllDisplays ();
76+
77+ // 3. 尋找視窗中心點在哪個顯示器範圍內
78+ Display currentDisplay = displays.firstWhere ((display) {
79+ // 注意:這裡使用 visiblePosition 或 bounds.topLeft
80+ final Offset origin = display.visiblePosition ?? Offset .zero;
81+ final Size size = display.size;
82+
83+ return center.dx >= origin.dx &&
84+ center.dx <= origin.dx + size.width &&
85+ center.dy >= origin.dy &&
86+ center.dy <= origin.dy + size.height;
87+ }, orElse: () => displays.first);
88+
89+ // 4. 根據找到的螢幕設定全螢幕範圍
90+ await windowManager.setBounds (
91+ Rect .fromLTWH (
92+ currentDisplay.visiblePosition! .dx,
93+ currentDisplay.visiblePosition! .dy,
94+ currentDisplay.size.width,
95+ currentDisplay.size.height,
96+ ),
97+ );
98+ await windowManager.setAlwaysOnTop (true );
3999 }
40100}
41101
0 commit comments