mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-30 23:58:13 +08:00
opt set window size/pos
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -84,22 +84,25 @@ void main() async {
|
|||||||
);
|
);
|
||||||
} else if (Utils.isDesktop) {
|
} else if (Utils.isDesktop) {
|
||||||
await windowManager.ensureInitialized();
|
await windowManager.ensureInitialized();
|
||||||
final windowSize = Pref.windowSize;
|
|
||||||
final windowPosition = Pref.windowPosition;
|
WindowOptions windowOptions = const WindowOptions(
|
||||||
final hasPos = windowPosition != null;
|
minimumSize: Size(400, 720),
|
||||||
WindowOptions windowOptions = WindowOptions(
|
|
||||||
minimumSize: const Size(400, 720),
|
|
||||||
size: Size(windowSize[0], windowSize[1]),
|
|
||||||
center: !hasPos,
|
|
||||||
skipTaskbar: false,
|
skipTaskbar: false,
|
||||||
titleBarStyle: TitleBarStyle.normal,
|
titleBarStyle: TitleBarStyle.normal,
|
||||||
title: Constants.appName,
|
title: Constants.appName,
|
||||||
);
|
);
|
||||||
windowManager.waitUntilReadyToShow(windowOptions, () async {
|
windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||||
if (hasPos) {
|
final windowSize = Pref.windowSize;
|
||||||
await windowManager.setPosition(
|
final windowOffset = await Utils.windowOffset;
|
||||||
Offset(windowPosition[0], windowPosition[1]),
|
final bounds = Rect.fromLTWH(
|
||||||
);
|
windowOffset.left,
|
||||||
|
windowOffset.top,
|
||||||
|
windowSize[0],
|
||||||
|
windowSize[1],
|
||||||
|
);
|
||||||
|
await windowManager.setBounds(bounds);
|
||||||
|
if (Pref.isWindowMaximized) {
|
||||||
|
await windowManager.maximize();
|
||||||
}
|
}
|
||||||
await windowManager.show();
|
await windowManager.show();
|
||||||
await windowManager.focus();
|
await windowManager.focus();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class MainApp extends StatefulWidget {
|
|||||||
class _MainAppState extends State<MainApp>
|
class _MainAppState extends State<MainApp>
|
||||||
with RouteAware, WidgetsBindingObserver, WindowListener, TrayListener {
|
with RouteAware, WidgetsBindingObserver, WindowListener, TrayListener {
|
||||||
final MainController _mainController = Get.put(MainController());
|
final MainController _mainController = Get.put(MainController());
|
||||||
|
late final _setting = GStorage.setting;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -98,29 +99,32 @@ class _MainAppState extends State<MainApp>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onWindowMoved() {
|
void onWindowMaximize() {
|
||||||
updateWindowOffset();
|
_setting.put(SettingBoxKey.isWindowMaximized, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onWindowResized() {
|
void onWindowUnmaximize() {
|
||||||
updateWindowSize();
|
_setting.put(SettingBoxKey.isWindowMaximized, false);
|
||||||
updateWindowOffset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateWindowOffset() async {
|
@override
|
||||||
|
Future<void> onWindowMoved() async {
|
||||||
if (!await windowManager.isMaximized()) {
|
if (!await windowManager.isMaximized()) {
|
||||||
final Offset offset = await windowManager.getPosition();
|
final Offset offset = await windowManager.getPosition();
|
||||||
GStorage.setting.put(SettingBoxKey.windowPosition, [
|
_setting.put(SettingBoxKey.windowPosition, [
|
||||||
offset.dx,
|
offset.dx,
|
||||||
offset.dy,
|
offset.dy,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateWindowSize() async {
|
@override
|
||||||
final Size size = await windowManager.getSize();
|
Future<void> onWindowResized() async {
|
||||||
GStorage.setting.put(SettingBoxKey.windowSize, [size.width, size.height]);
|
final Rect bounds = await windowManager.getBounds();
|
||||||
|
_setting
|
||||||
|
..put(SettingBoxKey.windowSize, [bounds.width, bounds.height])
|
||||||
|
..put(SettingBoxKey.windowPosition, [bounds.left, bounds.top]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -135,10 +135,12 @@ abstract class SettingBoxKey {
|
|||||||
showFsScreenshotBtn = 'showFsScreenshotBtn',
|
showFsScreenshotBtn = 'showFsScreenshotBtn',
|
||||||
showFsLockBtn = 'showFsLockBtn',
|
showFsLockBtn = 'showFsLockBtn',
|
||||||
silentDownImg = 'silentDownImg',
|
silentDownImg = 'silentDownImg',
|
||||||
showMemberShop = 'showMemberShop',
|
showMemberShop = 'showMemberShop';
|
||||||
minimizeOnExit = 'minimizeOnExit',
|
|
||||||
|
static const String minimizeOnExit = 'minimizeOnExit',
|
||||||
windowSize = 'windowSize',
|
windowSize = 'windowSize',
|
||||||
windowPosition = 'windowPosition';
|
windowPosition = 'windowPosition',
|
||||||
|
isWindowMaximized = 'isWindowMaximized';
|
||||||
|
|
||||||
static const String subtitlePreferenceV2 = 'subtitlePreferenceV2',
|
static const String subtitlePreferenceV2 = 'subtitlePreferenceV2',
|
||||||
enableDragSubtitle = 'enableDragSubtitle',
|
enableDragSubtitle = 'enableDragSubtitle',
|
||||||
|
|||||||
@@ -823,4 +823,7 @@ abstract class Pref {
|
|||||||
|
|
||||||
static List<double>? get windowPosition =>
|
static List<double>? get windowPosition =>
|
||||||
_setting.get(SettingBoxKey.windowPosition);
|
_setting.get(SettingBoxKey.windowPosition);
|
||||||
|
|
||||||
|
static bool get isWindowMaximized =>
|
||||||
|
_setting.get(SettingBoxKey.isWindowMaximized, defaultValue: false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,17 @@ import 'dart:io';
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:PiliPlus/common/constants.dart';
|
import 'package:PiliPlus/common/constants.dart';
|
||||||
|
import 'package:PiliPlus/utils/storage_pref.dart';
|
||||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
|
import 'package:flutter/material.dart' show Alignment;
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:path/path.dart' as path;
|
import 'package:path/path.dart' as path;
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:share_plus/share_plus.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
import 'package:window_manager/window_manager.dart';
|
||||||
|
|
||||||
abstract class Utils {
|
abstract class Utils {
|
||||||
static final Random random = Random();
|
static final Random random = Random();
|
||||||
@@ -25,6 +28,19 @@ abstract class Utils {
|
|||||||
static final bool isDesktop =
|
static final bool isDesktop =
|
||||||
Platform.isWindows || Platform.isMacOS || Platform.isLinux;
|
Platform.isWindows || Platform.isMacOS || Platform.isLinux;
|
||||||
|
|
||||||
|
static Future<({double left, double top})> get windowOffset async {
|
||||||
|
final windowPosition = Pref.windowPosition;
|
||||||
|
if (windowPosition != null) {
|
||||||
|
return (left: windowPosition[0], top: windowPosition[1]);
|
||||||
|
}
|
||||||
|
final Size windowSize = await windowManager.getSize();
|
||||||
|
final Offset position = await calcWindowPosition(
|
||||||
|
windowSize,
|
||||||
|
Alignment.center,
|
||||||
|
);
|
||||||
|
return (left: position.dx, top: position.dy);
|
||||||
|
}
|
||||||
|
|
||||||
static Future<bool> get isWiFi async {
|
static Future<bool> get isWiFi async {
|
||||||
try {
|
try {
|
||||||
return Utils.isMobile &&
|
return Utils.isMobile &&
|
||||||
|
|||||||
Reference in New Issue
Block a user