3ddb0ea2d4
Co-Authored-By: Claude Code <noreply@anthropic.com>
44 lines
1.5 KiB
Dart
44 lines
1.5 KiB
Dart
/// 上传域 Provider 装配(P3 计划 Task 6)。
|
||
///
|
||
/// 生产装配:TaskStore.app()(documents/upload_tasks.sqlite)+ ApiClient
|
||
/// (Bearer 自动注入)+ DeviceId(shared_preferences)。引擎生命周期
|
||
/// (start(accountId)/stop,随登录态切换)由 App 壳/队列 UI 驱动——
|
||
/// Task 9 队列 UI 落地时接线;本文件保证依赖图就绪。
|
||
library;
|
||
|
||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||
|
||
import '../../core/api_client.dart';
|
||
import '../../core/device_id.dart';
|
||
import 'preparer.dart';
|
||
import 'task_store.dart';
|
||
import 'upload_engine.dart';
|
||
|
||
/// 任务库(生产:app documents dir 持久库;测试 override 为 memory)。
|
||
final taskStoreProvider = Provider<TaskStore>((ref) {
|
||
final store = TaskStore.app();
|
||
ref.onDispose(store.close);
|
||
return store;
|
||
});
|
||
|
||
/// 传输引擎(裸 Dio 直传 presign;并行/保留期配置见 upload_engine.dart
|
||
/// 的 dart-define 常量)。
|
||
final uploadEngineProvider = Provider<UploadEngine>((ref) {
|
||
final engine = UploadEngine(
|
||
ref.watch(taskStoreProvider),
|
||
ref.watch(apiClientProvider),
|
||
ref.watch(deviceIdProvider),
|
||
);
|
||
ref.onDispose(engine.dispose);
|
||
return engine;
|
||
});
|
||
|
||
/// 准备器(入队回调唤醒引擎立即出队)。
|
||
final uploadPreparerProvider = Provider<UploadPreparer>((ref) {
|
||
final engine = ref.watch(uploadEngineProvider);
|
||
return UploadPreparer(
|
||
ref.watch(taskStoreProvider),
|
||
onEnqueued: engine.notifyWorkAvailable,
|
||
);
|
||
});
|