56 lines
1.5 KiB
Dart
56 lines
1.5 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:fl_clash/models/config.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:window_manager/window_manager.dart';
|
|
import 'package:windows_single_instance/windows_single_instance.dart';
|
|
|
|
import 'protocol.dart';
|
|
import 'system.dart';
|
|
|
|
class Window {
|
|
init(WindowProps props) async {
|
|
if (Platform.isWindows) {
|
|
await WindowsSingleInstance.ensureSingleInstance([], "FlClash");
|
|
protocol.register("clash");
|
|
protocol.register("clashmeta");
|
|
protocol.register("flclash");
|
|
}
|
|
await windowManager.ensureInitialized();
|
|
WindowOptions windowOptions = WindowOptions(
|
|
size: Size(props.width, props.height),
|
|
minimumSize: const Size(380, 500),
|
|
windowButtonVisibility: false,
|
|
titleBarStyle: TitleBarStyle.hidden,
|
|
);
|
|
if (props.left != null || props.top != null) {
|
|
await windowManager.setPosition(
|
|
Offset(props.left ?? 0, props.top ?? 0),
|
|
);
|
|
} else {
|
|
await windowManager.setAlignment(Alignment.center);
|
|
}
|
|
// if(Platform.isWindows){
|
|
// await windowManager.setTitleBarStyle(TitleBarStyle.hidden);
|
|
// }
|
|
await windowManager.waitUntilReadyToShow(windowOptions, () async {
|
|
await windowManager.setPreventClose(true);
|
|
});
|
|
}
|
|
|
|
show() async {
|
|
await windowManager.show();
|
|
await windowManager.focus();
|
|
}
|
|
|
|
close() async {
|
|
exit(0);
|
|
}
|
|
|
|
hide() async {
|
|
await windowManager.hide();
|
|
}
|
|
}
|
|
|
|
final window = system.isDesktop ? Window() : null;
|