Files
MWClash/lib/common/future.dart
chen08209 f06abecb3e Add android separates the core process
Support core status check and force restart

Optimize proxies page and access page

Update flutter and pub dependencies
2025-09-03 10:08:26 +08:00

40 lines
828 B
Dart

import 'dart:async';
import 'dart:ui';
import 'package:fl_clash/common/common.dart';
extension FutureExt<T> on Future<T> {
Future<T> withTimeout({
Duration? timeout,
String? tag,
VoidCallback? onLast,
FutureOr<T> Function()? onTimeout,
}) {
final realTimout = timeout ?? const Duration(minutes: 3);
Timer(realTimout + commonDuration, () {
if (onLast != null) {
onLast();
}
});
return this.timeout(
realTimout,
onTimeout: () async {
if (onTimeout != null) {
return onTimeout();
} else {
throw TimeoutException('${tag ?? runtimeType} timeout');
}
},
);
}
}
extension CompleterExt<T> on Completer<T> {
void safeCompleter(T value) {
if (isCompleted) {
return;
}
complete(value);
}
}