Add file editor Fix android service issues Optimize desktop background performance Optimize android main process performance Optimize delay test Optimize vpn protect
45 lines
994 B
Dart
45 lines
994 B
Dart
import 'dart:async';
|
|
import 'dart:ui';
|
|
|
|
import 'package:fl_clash/common/common.dart';
|
|
|
|
extension CompleterExt<T> on Completer<T> {
|
|
safeFuture({
|
|
Duration? timeout,
|
|
VoidCallback? onLast,
|
|
FutureOr<T> Function()? onTimeout,
|
|
required String functionName,
|
|
}) {
|
|
final realTimeout = timeout ?? const Duration(seconds: 1);
|
|
Timer(realTimeout + commonDuration, () {
|
|
if (onLast != null) {
|
|
onLast();
|
|
}
|
|
});
|
|
return future.withTimeout(
|
|
timeout: realTimeout,
|
|
functionName: functionName,
|
|
onTimeout: onTimeout,
|
|
);
|
|
}
|
|
}
|
|
|
|
extension FutureExt<T> on Future<T> {
|
|
Future<T> withTimeout({
|
|
required Duration timeout,
|
|
required String functionName,
|
|
FutureOr<T> Function()? onTimeout,
|
|
}) {
|
|
return this.timeout(
|
|
timeout,
|
|
onTimeout: () async {
|
|
if (onTimeout != null) {
|
|
return onTimeout();
|
|
} else {
|
|
throw TimeoutException('$functionName timeout');
|
|
}
|
|
},
|
|
);
|
|
}
|
|
}
|