handleState<T> static method

Future<void> handleState<T>(
  1. DKStateEvent<T> state, {
  2. void onLoading()?,
  3. void onSuccess(
    1. T data
    )?,
  4. void onError(
    1. String message,
    2. Object? error,
    3. StackTrace? stackTrace
    )?,
  5. void onIdle()?,
  6. void onComplete()?,
})

处理单个状态事件并执行对应回调

这是一个通用的状态处理逻辑,根据状态类型执行不同的回调

@param state 当前状态 @param onLoading 加载中回调 @param onSuccess 成功回调 @param onError 错误回调 @return Future

示例:

await DKStateEventHelper.handleState(
  currentState,
  onLoading: () => showLoading(),
  onSuccess: (data, message) => showData(data),
  onError: (message, error, stackTrace) => showError(message),

);

Implementation

static Future<void> handleState<T>(
  DKStateEvent<T> state, {
  void Function()? onLoading,
  void Function(T data)? onSuccess,
  void Function(String message, Object? error, StackTrace? stackTrace)?
  onError,
  void Function()? onIdle,
  void Function()? onComplete,
}) async {
  if (state is DKStateEventLoading<T>) {
    if (onLoading != null) {
      DKStateUtil.callLog(
        () => DKLog.d("[${state.runId}] 状态:加载中", tag: _tag),
      );
      try {
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 开始执行加载中回调", tag: _tag),
        );
        onLoading();
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 加载中回调执行完毕", tag: _tag),
        );
      } catch (e, stackTrace) {
        DKStateUtil.callLog(
          () => DKLog.e(
            "[${state.runId}] 加载中回调出错: $e",
            tag: _tag,
            error: e,
            stackTrace: stackTrace,
          ),
        );
      } finally {
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 结束执行加载中回调", tag: _tag),
        );
      }
    }
  } else if (state is DKStateEventSuccess<T>) {
    if (onSuccess != null) {
      DKStateUtil.callLog(() => DKLog.i("[${state.runId}] 状态:成功", tag: _tag));
      try {
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 开始执行成功回调", tag: _tag),
        );
        onSuccess(state.data,);
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 成功回调执行完毕", tag: _tag),
        );
      } catch (e, stackTrace) {
        DKStateUtil.callLog(
          () => DKLog.e(
            "[${state.runId}] 成功回调出错: $e",
            tag: _tag,
            error: e,
            stackTrace: stackTrace,
          ),
        );
      } finally {
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 结束执行成功回调", tag: _tag),
        );
      }
    }
  } else if (state is DKStateEventError<T>) {
    if (onError != null) {
      DKStateUtil.callLog(
        () => DKLog.e("[${state.runId}] 状态:错误 - ${state.message}", tag: _tag),
      );
      try {
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 开始执行错误回调", tag: _tag),
        );
        onError(state.message, state.error, state.stackTrace);
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 错误回调执行完毕", tag: _tag),
        );
      } catch (e, stackTrace) {
        DKStateUtil.callLog(
          () => DKLog.e(
            "[${state.runId}] 错误回调出错: $e",
            tag: _tag,
            error: e,
            stackTrace: stackTrace,
          ),
        );
      } finally {
        DKStateUtil.callLog(
          () => DKLog.i("[${state.runId}] 结束执行错误回调", tag: _tag),
        );
      }
    } else if (state is DKStateEventIdle<T>) {
      if (onIdle != null) {
        DKStateUtil.callLog(
          () => DKLog.d("[${state.runId}] 状态:空闲", tag: _tag),
        );
        try {
          DKStateUtil.callLog(
            () => DKLog.i("[${state.runId}] 开始执行空闲回调", tag: _tag),
          );
          onIdle();
          DKStateUtil.callLog(
            () => DKLog.i("[${state.runId}] 空闲回调执行完毕", tag: _tag),
          );
        } catch (e, stackTrace) {
          DKStateUtil.callLog(
            () => DKLog.e(
              "[${state.runId}] 空闲回调出错: $e",
              tag: _tag,
              error: e,
              stackTrace: stackTrace,
            ),
          );
        } finally {
          DKStateUtil.callLog(
            () => DKLog.i("[${state.runId}] 结束执行空闲回调", tag: _tag),
          );
        }
      } else if (state is DkStateEventCompleted<T>) {
        if (onComplete != null) {
          DKStateUtil.callLog(
            () => DKLog.d("[${state.runId}] 状态:完成", tag: _tag),
          );
          try {
            DKStateUtil.callLog(
              () => DKLog.i("[${state.runId}] 开始执行完成回调", tag: _tag),
            );
            onComplete();
            DKStateUtil.callLog(
              () => DKLog.i("[${state.runId}] 完成回调执行完毕", tag: _tag),
            );
          } catch (e, stackTrace) {
            DKStateUtil.callLog(
              () => DKLog.e(
                "[${state.runId}] 完成回调出错: $e",
                tag: _tag,
                error: e,
                stackTrace: stackTrace,
              ),
            );
          } finally {
            DKStateUtil.callLog(
              () => DKLog.i("[${state.runId}] 结束执行完成回调", tag: _tag),
            );
          }
        }
      }
    }
  }
}