optimize delayTest

This commit is contained in:
chen08209
2024-05-17 15:39:41 +08:00
parent 9a07c785f2
commit c4b470ffaf
8 changed files with 95 additions and 102 deletions

View File

@@ -39,6 +39,8 @@ class AppController {
updateRunTime,
updateTraffic,
];
clearShowProxyDelay();
testShowProxyDelay();
} else {
await globalState.stopSystemProxy();
appState.traffics = [];
@@ -221,6 +223,7 @@ class AppController {
}
healthcheck() {
if(globalState.healthcheckLock) return;
for (final delay in appState.delayMap.entries) {
setDelay(
Delay(
@@ -375,4 +378,11 @@ class AppController {
);
}
}
testShowProxyDelay() {
final showProxyDelay = appState.getRealProxyName(appState.showProxyName);
if (showProxyDelay != null) {
globalState.updateCurrentDelay(showProxyDelay);
}
}
}

View File

@@ -95,30 +95,6 @@ class _NetworkDetectionState extends State<NetworkDetection> {
});
}
_updateCurrentDelayContainer(Widget child) {
return Selector2<AppState, Config, UpdateCurrentDelaySelectorState>(
selector: (_, appState, config) {
return UpdateCurrentDelaySelectorState(
isInit: appState.isInit,
currentProxyName: appState.getRealProxyName(appState.showProxyName),
delay: appState
.delayMap[appState.getRealProxyName(appState.showProxyName)],
isCurrent: appState.currentLabel == 'dashboard',
);
},
builder: (_, state, __) {
_updateCurrentDelay(
state.currentProxyName,
state.delay,
state.isCurrent,
state.isInit,
);
return child;
},
child: child,
);
}
@override
Widget build(BuildContext context) {
return CommonCard(
@@ -126,57 +102,55 @@ class _NetworkDetectionState extends State<NetworkDetection> {
iconData: Icons.network_check,
label: appLocalizations.networkDetection,
),
child: _updateCurrentDelayContainer(
Selector<AppState, NetworkDetectionSelectorState>(
selector: (_, appState) {
return NetworkDetectionSelectorState(
currentProxyName: appState.showProxyName,
delay: appState.getDelay(
appState.showProxyName,
),
);
},
builder: (_, state, __) {
return Container(
padding: const EdgeInsets.all(16).copyWith(top: 0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
flex: 0,
child: TooltipText(
text: Text(
state.currentProxyName ?? appLocalizations.noProxy,
overflow: TextOverflow.ellipsis,
maxLines: 1,
style: Theme.of(context)
.textTheme
.titleMedium
?.toSoftBold(),
child: Selector<AppState, NetworkDetectionSelectorState>(
selector: (_, appState) {
return NetworkDetectionSelectorState(
currentProxyName: appState.showProxyName,
delay: appState.getDelay(
appState.showProxyName,
),
);
},
builder: (_, state, __) {
return Container(
padding: const EdgeInsets.all(16).copyWith(top: 0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
flex: 0,
child: TooltipText(
text: Text(
state.currentProxyName ?? appLocalizations.noProxy,
overflow: TextOverflow.ellipsis,
maxLines: 1,
style: Theme.of(context)
.textTheme
.titleMedium
?.toSoftBold(),
),
),
),
const SizedBox(
height: 8,
),
Flexible(
child: Container(
height: globalState.appController.measure.titleLargeHeight,
alignment: Alignment.centerLeft,
child: FadeBox(
child: _buildDescription(
state.currentProxyName,
state.delay,
),
),
),
const SizedBox(
height: 8,
),
Flexible(
child: Container(
height: globalState.appController.measure.titleLargeHeight,
alignment: Alignment.centerLeft,
child: FadeBox(
child: _buildDescription(
state.currentProxyName,
state.delay,
),
),
),
),
],
),
);
},
),
),
],
),
);
},
),
);
}

View File

@@ -51,9 +51,6 @@ class _StartButtonState extends State<StartButton>
updateSystemProxy() async {
final appController = globalState.appController;
await appController.updateSystemProxy(isStart);
if (isStart && mounted) {
appController.clearShowProxyDelay();
}
}
@override

View File

@@ -149,8 +149,8 @@ class ProxiesTabView extends StatelessWidget {
return proxies = List.of(proxies)
..sort(
(a, b) {
final aDelay = appState.delayMap[a.name];
final bDelay = appState.delayMap[b.name];
final aDelay = appState.getDelay(a.name);
final bDelay = appState.getDelay(b.name);
if (aDelay == null && bDelay == null) {
return 0;
}
@@ -313,9 +313,10 @@ class ProxiesTabView extends StatelessWidget {
ProxiesCardSelectorState>(
selector: (_, appState, config, clashConfig) {
final group = appState.getGroupWithName(groupName)!;
bool isSelected = config.currentSelectedMap[group.name] == proxy.name ||
(config.currentSelectedMap[group.name] == null &&
group.now == proxy.name);
bool isSelected =
config.currentSelectedMap[group.name] == proxy.name ||
(config.currentSelectedMap[group.name] == null &&
group.now == proxy.name);
return ProxiesCardSelectorState(
isSelected: isSelected,
);
@@ -420,13 +421,15 @@ class _DelayTestButtonContainerState extends State<DelayTestButtonContainer>
late Animation<double> _scale;
late Animation<double> _opacity;
_healthcheck() async {
_healthcheck() async
{
if(globalState.healthcheckLock) return;
_controller.forward();
globalState.appController.healthcheck();
await Future.delayed(
appConstant.httpTimeoutDuration + appConstant.moreDuration,
);
_controller.reverse();
Future.delayed(appConstant.httpTimeoutDuration + appConstant.moreDuration,
() {
_controller.reverse();
});
}
@override
@@ -447,7 +450,7 @@ class _DelayTestButtonContainerState extends State<DelayTestButtonContainer>
curve: const Interval(
0,
1,
curve: Curves.easeIn,
curve: Curves.elasticInOut,
),
),
);

View File

@@ -15,7 +15,7 @@ import 'common/common.dart';
class GlobalState {
Timer? timer;
Function? updateSortNumDebounce;
Function? healthcheckLockDebounce;
Timer? groupsUpdateTimer;
Function? updateCurrentDelayDebounce;
PageController? pageController;
@@ -26,6 +26,7 @@ class GlobalState {
List<Function> updateFunctionLists = [];
List<NavigationItem> currentNavigationItems = [];
bool updatePackagesLock = false;
bool healthcheckLock = false;
startListenUpdate() {
if (timer != null && timer!.isActive == true) return;

View File

@@ -38,8 +38,16 @@ class _ClashMessageContainerState extends State<ClashMessageContainer>
@override
void onDelay(Delay delay) {
globalState.healthcheckLock = true;
final appController = globalState.appController;
appController.setDelay(delay);
globalState.healthcheckLockDebounce ??= debounce<Function()>(
() async {
globalState.healthcheckLock = false;
},
milliseconds: 5000,
);
globalState.healthcheckLockDebounce!();
super.onDelay(delay);
}