register<T> method

PreloadManager register<T>(
  1. T target, {
  2. String? name,
  3. List<String> dependencies = const [],
  4. Future<bool> checkBeforeExecute()?,
  5. Duration? checkRetryDelay,
  6. int maxCheckRetries = 10,
  7. int priority = 1,
  8. bool required = true,
  9. Duration? timeout,
})

注册预加载任务 — 智能识别 Provider 或普通方法

自动判断类型:

  • targetProviderListenable → Provider 任务
  • targetFunction(异步方法)→ 普通方法任务

Provider 任务示例:

PreloadManager.instance.register(myProvider, name: 'user-data');

普通方法任务示例(需显式传入异步函数):

PreloadManager.instance.register(() async {
  await db.initialize();
}, name: 'db-init');

Implementation

PreloadManager register<T>(
  T target, {
  String? name,
  List<String> dependencies = const [],
  Future<bool> Function()? checkBeforeExecute,
  Duration? checkRetryDelay,
  int maxCheckRetries = 10,
  int priority = 1,
  bool required = true,
  Duration? timeout,
}) {
  PreloadTask task;

  if (target is ProviderListenable) {
    // Provider 任务
    task = PreloadTask(
      provider: target as ProviderListenable<T>,
      id: name ?? target.runtimeType.toString(),
      dependencies: dependencies,
      checkBeforeExecute: checkBeforeExecute,
      checkRetryDelay: checkRetryDelay ?? _config.defaultCheckRetryDelay,
      maxCheckRetries: maxCheckRetries,
      config: TaskConfig(
        priority: priority,
        required: required,
        timeout: timeout,
        name: name,
      ),
    );
  } else if (target is Future<void> Function()) {
    // 普通方法任务
    task = PreloadTask(
      method: target as Future<void> Function(),
      id: name ?? 'method_${target.hashCode}',
      dependencies: dependencies,
      checkBeforeExecute: checkBeforeExecute,
      checkRetryDelay: checkRetryDelay ?? _config.defaultCheckRetryDelay,
      maxCheckRetries: maxCheckRetries,
      config: TaskConfig(
        priority: priority,
        required: required,
        timeout: timeout,
        name: name,
      ),
    );
  } else {
    throw PreloadException(
      'register() 仅支持 ProviderListenable 或 Future<void> Function(),'
      '传入类型为: ${target.runtimeType}',
    );
  }

  _registeredTasks.add(task);
  _log(
    '[REGISTER] 注册任务: id=${task.id}, type=${task.isProviderTask ? 'provider' : 'method'}, '
    'priority=$priority, required=$required, hasCheck=${task.hasCheck}',
  );
  return this;
}