Files
MWClash/lib/common/future.dart
chen08209 6e404ab19c Fix windows some issues
Optimize overwrite handle

Optimize access control page

Optimize some details
2025-12-12 14:33:03 +08:00

40 lines
831 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 realTimeout = timeout ?? const Duration(minutes: 3);
Timer(realTimeout + commonDuration, () {
if (onLast != null) {
onLast();
}
});
return this.timeout(
realTimeout,
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);
}
}