Forráskód Böngészése

[Modify]修改async_uil部分参数

zhipeng 1 éve
szülő
commit
1ad1005044

+ 3 - 3
lib/data/repositories/account_repository.dart

@@ -5,11 +5,11 @@ import 'package:electronic_assistant/data/api/atmob_api.dart';
 import 'package:electronic_assistant/data/api/request/complaint_submit_request.dart';
 import 'package:electronic_assistant/data/repositories/task_repository.dart';
 import 'package:electronic_assistant/utils/async_util.dart';
-import 'package:electronic_assistant/utils/cancel_future.dart';
 import 'package:electronic_assistant/utils/event_bus.dart';
 import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
+
 import '../../resource/string.gen.dart';
 import '../../sdk/gravity/gravity_helper.dart';
 import '../../utils/http_handler.dart';
@@ -79,8 +79,8 @@ class AccountRepository {
     if (_getUserInfoFuture != null) {
       _getUserInfoFuture?.cancel();
     }
-    _getUserInfoFuture =
-        AsyncUtil.retryWithExponentialBackoff(() => getUserInfo(), 10, (error) {
+    _getUserInfoFuture = AsyncUtil.retryWithExponentialBackoff(
+        () => getUserInfo(), 10, predicate: (error) {
       if (error is ServerErrorException) {
         return error.code != ErrorCode.errorCodeNoLogin;
       }

+ 3 - 2
lib/data/repositories/config_repository.dart

@@ -19,8 +19,9 @@ class ConfigRepository {
     if (_exampleInfo != null) {
       return _exampleInfo!;
     }
-    return await AsyncUtil.retryWhen(() => _requestExampleInfo(), 3,
-        const Duration(seconds: 1), (error) => true);
+    return await AsyncUtil.retry(
+        () => _requestExampleInfo(), const Duration(seconds: 1),
+        maxRetry: 3);
   }
 
   Future<ExampleInfoResponse> _requestExampleInfo() {

+ 6 - 5
lib/data/repositories/task_repository.dart

@@ -6,8 +6,8 @@ import 'package:electronic_assistant/data/repositories/account_repository.dart';
 import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
 import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:electronic_assistant/utils/async_util.dart';
-import 'package:electronic_assistant/utils/cancel_future.dart';
 import 'package:flutter/cupertino.dart';
+
 import '../../dialog/analyse_status_dialog.dart';
 import '../../module/talk/view.dart';
 import '../../utils/http_handler.dart';
@@ -34,7 +34,8 @@ class TaskRepository {
 
   void startUnfinishedTask() {
     debugPrint('开始获取未完成任务==');
-    AsyncUtil.retryWithExponentialBackoff(() => _tasksRunning(), 10, (error) {
+    AsyncUtil.retryWithExponentialBackoff(() => _tasksRunning(), 10,
+        predicate: (error) {
       if (error is ServerErrorException) {
         return error.code != ErrorCode.errorCodeNoLogin;
       }
@@ -60,9 +61,9 @@ class TaskRepository {
     if (_taskStatusCheckFuture != null) {
       _taskStatusCheckFuture?.cancel();
     }
-    _taskStatusCheckFuture = AsyncUtil.retryWhen(
-        () => _checkAllTaskStatusFinished(), 0, const Duration(seconds: 3),
-        (error) {
+    _taskStatusCheckFuture = AsyncUtil.retry(
+        () => _checkAllTaskStatusFinished(), const Duration(seconds: 3),
+        predicate: (error) {
       if (error is ServerErrorException) {
         return error.code != ErrorCode.errorCodeNoLogin;
       }

+ 1 - 3
lib/module/store/payment_status_manager.dart

@@ -1,14 +1,12 @@
 import 'package:electronic_assistant/data/repositories/account_repository.dart';
 import 'package:electronic_assistant/data/repositories/store_repository.dart';
 import 'package:electronic_assistant/handler/event_handler.dart';
-import 'package:electronic_assistant/sdk/gravity/gravity_helper.dart';
 import 'package:electronic_assistant/utils/async_util.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:synchronized/synchronized.dart';
 
 import '../../data/bean/payment_way.dart';
 import '../../data/bean/store_item.dart';
-import '../../utils/cancel_future.dart';
 
 class PaymentStatusManager {
   PaymentStatusManager._();
@@ -48,7 +46,7 @@ class PaymentStatusManager {
             });
           },
           10,
-          (error) {
+          predicate: (error) {
             if (error is PaymentStatusException) {
               return error.status == payStatusFail ||
                   error.status == payStatusUnpaid;

+ 4 - 4
lib/sdk/gravity/gravity_helper.dart

@@ -1,5 +1,5 @@
 import 'dart:async';
-import 'package:atmob_channel_reader/atmob_channel_reader.dart';
+
 import 'package:electronic_assistant/data/repositories/account_repository.dart';
 import 'package:electronic_assistant/device/atmob_platform_info.dart';
 import 'package:electronic_assistant/utils/async_util.dart';
@@ -7,10 +7,10 @@ import 'package:electronic_assistant/utils/mmkv_util.dart';
 import 'package:flutter/widgets.dart';
 import 'package:gravity_engine/gravity_engine.dart';
 import 'package:gravity_engine/gravity_engine_method_channel.dart';
+
 import '../../data/api/response/user_info_response.dart';
 import '../../data/consts/Constants.dart';
 import '../../data/consts/build_config.dart';
-import '../../utils/cancel_future.dart';
 
 typedef GravitySuccessCallback = void Function();
 
@@ -35,7 +35,7 @@ class GravityHelper {
       CancelableFuture<bool> initFuture = _gravityInitialize(ssid);
       _initFuture = initFuture;
       return await initFuture;
-    }, 5, null);
+    }, 5);
     _initFuture?.then((isPromote) {
       _isFromPromote = isPromote;
       callback?.call();
@@ -71,7 +71,7 @@ class GravityHelper {
         GravityHelper._currentClientId = ssid;
         return data;
       });
-    }, 5, null);
+    }, 5);
   }
 
   static void onLogin() {

+ 0 - 11
lib/utils/async_typeof.dart

@@ -1,11 +0,0 @@
-import 'dart:async';
-
-typedef FutureCallback<T> = Future<T> Function();
-
-typedef IntervalCallback<T> = Future<T> Function(int times);
-
-typedef Cancelable<T> = void Function();
-
-typedef FutureCompleter<T> = void Function(Completer<T> completer);
-
-typedef Predicate<T> = bool Function(T? value);

+ 83 - 13
lib/utils/async_util.dart

@@ -1,13 +1,21 @@
 import 'dart:async';
 
-import 'async_typeof.dart';
-import 'cancel_future.dart';
+typedef FutureCallback<T> = Future<T> Function();
+
+typedef IntervalCallback<T> = Future<T> Function(int times);
+
+typedef CancelCallback<T> = void Function();
+
+typedef FutureCompleter<T> = void Function(Completer<T> completer);
+
+typedef Predicate<T> = bool Function(T? value);
 
 class AsyncUtil {
   AsyncUtil._();
 
   static CancelableFuture<T> retryWithExponentialBackoff<T>(
-      FutureCallback<T> callback, int maxRetry, Predicate<dynamic>? predicate) {
+      FutureCallback<T> callback, int maxRetry,
+      {Predicate<dynamic>? predicate}) {
     const Duration initialInterval = Duration(seconds: 1);
     int retryCount = 0;
     Timer? timer;
@@ -37,9 +45,9 @@ class AsyncUtil {
     });
   }
 
-  static CancelableFuture<T> retryWhen<T>(FutureCallback<T> callback,
-      int maxRetry, Duration interval, Predicate<dynamic> predicate,
-      [Duration? timeout]) {
+  static CancelableFuture<T> retry<T>(
+      FutureCallback<T> callback, Duration interval,
+      {Duration? timeout, int? maxRetry, Predicate<dynamic>? predicate}) {
     int retryCount = 0;
     Timer? timer;
     Timer? timeoutTimer;
@@ -50,7 +58,8 @@ class AsyncUtil {
           completer.complete(value);
         }
       }).catchError((error) {
-        if ((maxRetry <= 0 || retryCount < maxRetry) && predicate(error)) {
+        if ((maxRetry == null || maxRetry <= 0 || retryCount < maxRetry) &&
+            (predicate == null || predicate(error))) {
           retryCount++;
           timer = Timer(interval, () => attempt(completer));
         } else {
@@ -76,12 +85,6 @@ class AsyncUtil {
     });
   }
 
-  static CancelableFuture<T> retry<T>(
-      FutureCallback<T> callback, int maxRetry, Duration interval,
-      [Duration? timeout]) {
-    return retryWhen(callback, maxRetry, interval, (error) => true, timeout);
-  }
-
   static CancelableFuture<T> delay<T>(
       FutureCallback<T> callback, Duration interval) {
     Timer? timer;
@@ -134,3 +137,70 @@ class AsyncUtil {
     return controller;
   }
 }
+
+abstract interface class Cancelable {
+  void cancel();
+}
+
+class CancelableFuture<T> implements Future<T>, Cancelable {
+  final Completer<T> _completer = Completer<T>();
+
+  final CancelCallback? _cancelable;
+
+  CancelableFuture(FutureCompleter<T> completer, this._cancelable) {
+    completer.call(_completer);
+  }
+
+  @override
+  void cancel() {
+    _cancelable?.call();
+    if (!_completer.isCompleted) {
+      _completer.completeError(CancelledError());
+    }
+  }
+
+  @override
+  Stream<T> asStream() => _completer.future.asStream();
+
+  @override
+  Future<T> catchError(Function onError, {bool Function(Object error)? test}) =>
+      _completer.future.catchError(onError, test: test);
+
+  @override
+  Future<R> then<R>(FutureOr<R> Function(T value) onValue,
+          {Function? onError}) =>
+      _completer.future.then(onValue, onError: onError);
+
+  @override
+  Future<T> timeout(Duration timeLimit, {FutureOr<T> Function()? onTimeout}) =>
+      _completer.future.timeout(timeLimit, onTimeout: onTimeout);
+
+  @override
+  Future<T> whenComplete(FutureOr<void> Function() action) =>
+      _completer.future.whenComplete(action);
+}
+
+class CancelledError extends Error {
+  @override
+  String toString() {
+    return 'Operation was cancelled';
+  }
+}
+
+extension CancelableFutureExtension<T> on Future<T> {
+  CancelableFuture<T> asCancelable(
+      FutureCompleter completer, CancelCallback? cancelable) {
+    CancelableFuture<T> cancelableFuture =
+        CancelableFuture(completer, cancelable);
+    then((value) {
+      if (!cancelableFuture._completer.isCompleted) {
+        cancelableFuture._completer.complete(value);
+      }
+    }).catchError((error) {
+      if (!cancelableFuture._completer.isCompleted) {
+        cancelableFuture._completer.completeError(error);
+      }
+    });
+    return cancelableFuture;
+  }
+}

+ 0 - 43
lib/utils/cancel_future.dart

@@ -1,43 +0,0 @@
-import 'dart:async';
-import 'async_typeof.dart';
-
-class CancelableFuture<T> implements Future<T> {
-  final Completer<T> _completer = Completer<T>();
-
-  final Cancelable? _cancelable;
-
-  CancelableFuture(FutureCompleter<T> completer, this._cancelable) {
-    completer.call(_completer);
-  }
-
-  void cancel() {
-    _cancelable?.call();
-  }
-
-  @override
-  Stream<T> asStream() => _completer.future.asStream();
-
-  @override
-  Future<T> catchError(Function onError, {bool Function(Object error)? test}) =>
-      _completer.future.catchError(onError, test: test);
-
-  @override
-  Future<R> then<R>(FutureOr<R> Function(T value) onValue,
-          {Function? onError}) =>
-      _completer.future.then(onValue, onError: onError);
-
-  @override
-  Future<T> timeout(Duration timeLimit, {FutureOr<T> Function()? onTimeout}) =>
-      _completer.future.timeout(timeLimit, onTimeout: onTimeout);
-
-  @override
-  Future<T> whenComplete(FutureOr<void> Function() action) =>
-      _completer.future.whenComplete(action);
-}
-
-extension CancelableFutureExtension<T> on Future<T> {
-  CancelableFuture<T> asCancelable(
-      FutureCompleter completer, Cancelable? cancelable) {
-    return CancelableFuture(completer, cancelable);
-  }
-}