mirror of
https://github.com/wanghongenpin/proxypin.git
synced 2026-03-15 04:23:17 +08:00
124 lines
3.0 KiB
Dart
124 lines
3.0 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_toastr/flutter_toastr.dart';
|
|
import 'package:network_proxy/network/bin/server.dart';
|
|
import 'package:network_proxy/utils/platform.dart';
|
|
import 'package:window_manager/window_manager.dart';
|
|
|
|
class SocketLaunch extends StatefulWidget {
|
|
final ProxyServer proxyServer;
|
|
final int size;
|
|
final bool startup;
|
|
final Function? onStart;
|
|
final Function? onStop;
|
|
final bool serverLaunch;
|
|
|
|
const SocketLaunch(
|
|
{super.key,
|
|
required this.proxyServer,
|
|
this.size = 25,
|
|
this.onStart,
|
|
this.onStop,
|
|
this.startup = true,
|
|
this.serverLaunch = true});
|
|
|
|
@override
|
|
State<StatefulWidget> createState() {
|
|
return _SocketLaunchState();
|
|
}
|
|
}
|
|
|
|
class _SocketLaunchState extends State<SocketLaunch> with WindowListener, WidgetsBindingObserver {
|
|
bool started = false;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
windowManager.addListener(this);
|
|
WidgetsBinding.instance.addObserver(this);
|
|
//启动代理服务器
|
|
if (widget.startup) {
|
|
start();
|
|
}
|
|
if (Platforms.isDesktop()) {
|
|
windowManager.setPreventClose(true);
|
|
}
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
windowManager.removeListener(this);
|
|
WidgetsBinding.instance.removeObserver(this);
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
void onWindowClose() async {
|
|
await widget.proxyServer.stop();
|
|
print("onWindowClose");
|
|
started = false;
|
|
await windowManager.destroy();
|
|
exit(0);
|
|
}
|
|
|
|
@override
|
|
void didChangeAppLifecycleState(AppLifecycleState state) {
|
|
super.didChangeAppLifecycleState(state);
|
|
if (state == AppLifecycleState.detached) {
|
|
print('AppLifecycleState.detached');
|
|
widget.onStop?.call();
|
|
widget.proxyServer.stop();
|
|
started = false;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return IconButton(
|
|
tooltip: started ? "停止" : "启动",
|
|
icon: Icon(started ? Icons.stop : Icons.play_arrow_sharp,
|
|
color: started ? Colors.red : Colors.green, size: widget.size.toDouble()),
|
|
onPressed: () async {
|
|
if (started) {
|
|
if (!widget.serverLaunch) {
|
|
setState(() {
|
|
widget.onStop?.call();
|
|
started = !started;
|
|
});
|
|
return;
|
|
}
|
|
|
|
widget.proxyServer.stop().then((value) {
|
|
widget.onStop?.call();
|
|
setState(() {
|
|
started = !started;
|
|
});
|
|
});
|
|
} else {
|
|
start();
|
|
}
|
|
});
|
|
}
|
|
|
|
///启动代理服务器
|
|
start() {
|
|
if (!widget.serverLaunch) {
|
|
setState(() {
|
|
widget.onStart?.call();
|
|
started = true;
|
|
});
|
|
return;
|
|
}
|
|
|
|
widget.proxyServer.start().then((value) {
|
|
setState(() {
|
|
started = true;
|
|
});
|
|
widget.onStart?.call();
|
|
}).catchError((e) {
|
|
FlutterToastr.show("启动失败,请检查端口号${widget.proxyServer.port}是否被占用", context, duration: 3);
|
|
});
|
|
}
|
|
}
|