handleState<T> static method
Future<void>
handleState<T>(
- DKStateEvent<
T> state, { - void onLoading()?,
- void onSuccess(
- T data
- void onError(
- String message,
- Object? error,
- StackTrace? stackTrace
- void onIdle()?,
- 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),
);
}
}
}
}
}
}