triggerQuery<T> static method

Future<void> triggerQuery<T>({
  1. required Future<T> query(),
  2. bool isEmpty(
    1. T data
    )?,
  3. required void onStateChange(
    1. DKStateQuery<T> state
    ),
  4. String? tag,
})

Implementation

static Future<void> triggerQuery<T>({
  required Future<T> Function() query,
  bool Function(T data)? isEmpty,
  required void Function(DKStateQuery<T> state) onStateChange,
  String? tag,
}) async {
  try {
    DKStateUtil.callLog(
      () => DKLog.title("开始查询数据: $T", tag: tag ?? _tag),
    );
    onStateChange(DkStateQueryLoading<T>());
    final result = await query();
    DKStateUtil.callLog(
      () => DKLog.d("查询数据成功: $T", tag: tag ?? _tag),
    );
    //尝试解析为Json以便更好地展示数据
    try {
      final encoder = const JsonEncoder.withIndent('  ');
      final prettyString = encoder.convert(result);
      DKStateUtil.callLog(
        () => DKLog.i("查询结果:\n$prettyString", tag:tag ?? _tag),
      );
    } catch (_) {
      DKStateUtil.callLog(
        () => DKLog.i("查询结果: $result", tag: tag ?? _tag),
      );
    }
    if (isEmpty != null && isEmpty(result)) {
      onStateChange(DkStateQueryEmpty<T>());
      DKStateUtil.callLog(
        () => DKLog.w("查询结果为空: $T", tag: tag ?? _tag),
      );
    } else {
      onStateChange(DkStateQuerySuccess<T>(result));
      DKStateUtil.callLog(
        () => DKLog.i("查询数据处理完成: $T", tag: tag ?? _tag),
      );
    }
  } catch (e, stackTrace) {
    onStateChange(DkStateQueryError<T>(e.toString()));
    DKStateUtil.callLog(
      () => DKLog.e(
        "查询数据出错: $e",
        tag: 'DKStateQueryHelper',
        error: e,
        stackTrace: stackTrace,
      ),
    );
  } finally {
    DKStateUtil.callLog(
      () => DKLog.title("查询数据结束: $T", tag: 'DKStateQueryHelper'),
    );
  }
}