register<T> method
注册预加载任务 — 智能识别 Provider 或普通方法
自动判断类型:
target为ProviderListenable→ Provider 任务target为 Function(异步方法)→ 普通方法任务
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;
}