add changeProfileDebounce
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi';
|
||||
import 'dart:io';
|
||||
import 'dart:isolate';
|
||||
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import '../enum/enum.dart';
|
||||
import '../models/models.dart';
|
||||
import '../common/common.dart';
|
||||
@@ -16,19 +18,23 @@ class ClashCore {
|
||||
late final ClashFFI clashFFI;
|
||||
late final DynamicLibrary lib;
|
||||
|
||||
ClashCore._internal() {
|
||||
DynamicLibrary _getClashLib() {
|
||||
debugPrint("OpenClash");
|
||||
if (Platform.isWindows) {
|
||||
lib = DynamicLibrary.open("libclash.dll");
|
||||
clashFFI = ClashFFI(lib);
|
||||
return DynamicLibrary.open("libclash.dll");
|
||||
}
|
||||
if (Platform.isMacOS) {
|
||||
lib = DynamicLibrary.open("libclash.dylib");
|
||||
clashFFI = ClashFFI(lib);
|
||||
return DynamicLibrary.open("libclash.dylib");
|
||||
}
|
||||
if (Platform.isAndroid || Platform.isLinux) {
|
||||
lib = DynamicLibrary.open("libclash.so");
|
||||
clashFFI = ClashFFI(lib);
|
||||
return DynamicLibrary.open("libclash.so");
|
||||
}
|
||||
throw "Platform is not supported";
|
||||
}
|
||||
|
||||
ClashCore._internal() {
|
||||
lib = _getClashLib();
|
||||
clashFFI = ClashFFI(lib);
|
||||
clashFFI.initNativeApiBridge(
|
||||
NativeApi.initializeApiDLData,
|
||||
receiver.sendPort.nativePort,
|
||||
|
||||
@@ -19,8 +19,8 @@ Function debounce<F extends Function>(F func,{int milliseconds = 600}) {
|
||||
if (timer != null) {
|
||||
timer!.cancel();
|
||||
}
|
||||
timer = Timer(Duration(milliseconds: milliseconds), () {
|
||||
Function.apply(func, args ?? [], namedArgs);
|
||||
timer = Timer(Duration(milliseconds: milliseconds), () async {
|
||||
await Function.apply(func, args ?? [], namedArgs);
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -56,7 +56,9 @@ class AppController {
|
||||
updateRunTime() {
|
||||
if (proxyManager.startTime != null) {
|
||||
final startTimeStamp = proxyManager.startTime!.millisecondsSinceEpoch;
|
||||
final nowTimeStamp = DateTime.now().millisecondsSinceEpoch;
|
||||
final nowTimeStamp = DateTime
|
||||
.now()
|
||||
.millisecondsSinceEpoch;
|
||||
appState.runTime = nowTimeStamp - startTimeStamp;
|
||||
} else {
|
||||
appState.runTime = null;
|
||||
@@ -131,6 +133,21 @@ class AppController {
|
||||
);
|
||||
}
|
||||
|
||||
Function? _changeProfileDebounce;
|
||||
|
||||
changeProfileDebounce(String? profileId) {
|
||||
if (profileId == config.currentProfileId) return;
|
||||
config.currentProfileId = profileId;
|
||||
_changeProfileDebounce ??= debounce<Function(String?)>((profileId) async {
|
||||
if (context.mounted) {
|
||||
await applyProfile();
|
||||
appState.delayMap = {};
|
||||
saveConfigPreferences();
|
||||
}
|
||||
});
|
||||
_changeProfileDebounce!([profileId]);
|
||||
}
|
||||
|
||||
changeProfile(String? value) async {
|
||||
if (value == config.currentProfileId) return;
|
||||
config.currentProfileId = value;
|
||||
@@ -144,8 +161,8 @@ class AppController {
|
||||
if (!profile.autoUpdate) return;
|
||||
final isNotNeedUpdate = profile.lastUpdateDate
|
||||
?.add(
|
||||
profile.autoUpdateDuration,
|
||||
)
|
||||
profile.autoUpdateDuration,
|
||||
)
|
||||
.isBeforeNow();
|
||||
if (isNotNeedUpdate == false) continue;
|
||||
await profile.update();
|
||||
@@ -162,7 +179,7 @@ class AppController {
|
||||
|
||||
clearCurrentDelay() {
|
||||
final currentProxyName =
|
||||
appState.getCurrentProxyName(config.currentProxyName, clashConfig.mode);
|
||||
appState.getCurrentProxyName(config.currentProxyName, clashConfig.mode);
|
||||
if (currentProxyName == null) return;
|
||||
appState.setDelay(Delay(name: currentProxyName, value: null));
|
||||
}
|
||||
@@ -249,7 +266,7 @@ class AppController {
|
||||
|
||||
toProfiles() {
|
||||
final index = globalState.currentNavigationItems.indexWhere(
|
||||
(element) => element.label == "profiles",
|
||||
(element) => element.label == "profiles",
|
||||
);
|
||||
if (index != -1) {
|
||||
toPage(index);
|
||||
@@ -262,7 +279,7 @@ class AppController {
|
||||
final commonScaffoldState = globalState.homeScaffoldKey.currentState;
|
||||
if (commonScaffoldState?.mounted != true) return;
|
||||
commonScaffoldState?.loadingRun(
|
||||
() async {
|
||||
() async {
|
||||
await Future.delayed(const Duration(milliseconds: 300));
|
||||
final profile = Profile(
|
||||
url: url,
|
||||
@@ -283,7 +300,7 @@ class AppController {
|
||||
|
||||
initLink() {
|
||||
linkManager.initAppLinksListen(
|
||||
(url) {
|
||||
(url) {
|
||||
globalState.showMessage(
|
||||
title: "${appLocalizations.add}${appLocalizations.profile}",
|
||||
message: TextSpan(
|
||||
@@ -292,14 +309,20 @@ class AppController {
|
||||
TextSpan(
|
||||
text: " $url ",
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
color: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.primary,
|
||||
decoration: TextDecoration.underline,
|
||||
decorationColor: Theme.of(context).colorScheme.primary,
|
||||
decorationColor: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.primary,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text:
|
||||
"${appLocalizations.create}${appLocalizations.profile}"),
|
||||
"${appLocalizations.create}${appLocalizations.profile}"),
|
||||
],
|
||||
),
|
||||
onTab: () {
|
||||
@@ -319,7 +342,7 @@ class AppController {
|
||||
final commonScaffoldState = globalState.homeScaffoldKey.currentState;
|
||||
if (commonScaffoldState?.mounted != true) return;
|
||||
commonScaffoldState?.loadingRun(
|
||||
() async {
|
||||
() async {
|
||||
await Future.delayed(const Duration(milliseconds: 300));
|
||||
final bytes = result.data?.bytes;
|
||||
if (bytes == null) {
|
||||
|
||||
@@ -24,6 +24,7 @@ class ProfilesFragment extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ProfilesFragmentState extends State<ProfilesFragment> {
|
||||
|
||||
String _getLastUpdateTimeDifference(DateTime lastDateTime) {
|
||||
final currentDateTime = DateTime.now();
|
||||
final difference = currentDateTime.difference(lastDateTime);
|
||||
@@ -209,7 +210,7 @@ class _ProfilesFragmentState extends State<ProfilesFragment> {
|
||||
child: _profileItem(
|
||||
profile: profile,
|
||||
groupValue: state.currentProfileId,
|
||||
onChanged: context.appController.changeProfile,
|
||||
onChanged: context.appController.changeProfileDebounce,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user