Skip to content

Commit

Permalink
optimize delayTest
Browse files Browse the repository at this point in the history
  • Loading branch information
chen08209 committed May 17, 2024
1 parent f9722cc commit a5fdb90
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 100 deletions.
10 changes: 10 additions & 0 deletions lib/controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ class AppController {
updateRunTime,
updateTraffic,
];
clearShowProxyDelay();
testShowProxyDelay();
} else {
await globalState.stopSystemProxy();
appState.traffics = [];
Expand Down Expand Up @@ -221,6 +223,7 @@ class AppController {
}

healthcheck() {
if(globalState.healthcheckLock) return;
for (final delay in appState.delayMap.entries) {
setDelay(
Delay(
Expand Down Expand Up @@ -375,4 +378,11 @@ class AppController {
);
}
}

testShowProxyDelay() {
final showProxyDelay = appState.getRealProxyName(appState.showProxyName);
if (showProxyDelay != null) {
globalState.updateCurrentDelay(showProxyDelay);
}
}
}
114 changes: 44 additions & 70 deletions lib/fragments/dashboard/network_detection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -95,88 +95,62 @@ 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(
info: Info(
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,
),
),
),
],
),
);
},
),
),
],
),
);
},
),
);
}
Expand Down
3 changes: 0 additions & 3 deletions lib/fragments/dashboard/start_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
25 changes: 14 additions & 11 deletions lib/fragments/proxies.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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,
);
Expand Down Expand Up @@ -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
Expand All @@ -447,7 +450,7 @@ class _DelayTestButtonContainerState extends State<DelayTestButtonContainer>
curve: const Interval(
0,
1,
curve: Curves.easeIn,
curve: Curves.elasticInOut,
),
),
);
Expand Down
3 changes: 2 additions & 1 deletion lib/state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import 'common/common.dart';

class GlobalState {
Timer? timer;
Function? updateSortNumDebounce;
Function? healthcheckLockDebounce;
Timer? groupsUpdateTimer;
Function? updateCurrentDelayDebounce;
PageController? pageController;
Expand All @@ -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;
Expand Down
8 changes: 8 additions & 0 deletions lib/widgets/clash_message_container.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
28 changes: 14 additions & 14 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -497,10 +497,10 @@ packages:
dependency: "direct main"
description:
name: intl
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.18.1"
version: "0.19.0"
io:
dependency: transitive
description:
Expand Down Expand Up @@ -545,26 +545,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.0.0"
version: "10.0.4"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
version: "3.0.3"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
version: "3.0.1"
lints:
dependency: transitive
description:
Expand Down Expand Up @@ -609,10 +609,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.11.0"
version: "1.12.0"
mime:
dependency: transitive
description:
Expand Down Expand Up @@ -949,10 +949,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.1"
version: "0.7.0"
timing:
dependency: transitive
description:
Expand Down Expand Up @@ -1053,10 +1053,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.flutter-io.cn"
source: hosted
version: "13.0.0"
version: "14.2.1"
watcher:
dependency: transitive
description:
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: fl_clash
description: A multi-platform proxy client based on ClashMeta, simple and easy to use, open-source and ad-free.
publish_to: 'none'
version: 0.8.2
version: 0.8.3
environment:
sdk: '>=3.1.0 <4.0.0'

Expand Down

0 comments on commit a5fdb90

Please sign in to comment.