import 'package:dio/dio.dart'; import 'package:flutter/widgets.dart'; import 'package:get_it/get_it.dart'; import 'package:go_router/go_router.dart'; import 'package:maibu_satabot_v2/core/infrastructure/logging/sentry_logger_impl.dart'; import 'package:maibu_satabot_v2/core/logging/i_logger_service.dart'; import 'package:maibu_satabot_v2/features/devices/data/datasources/impl/device_http_datasource_impl.dart'; import 'package:maibu_satabot_v2/features/devices/data/datasources/impl/path_http_datasource_impl.dart'; import 'package:maibu_satabot_v2/features/devices/domain/repositories/device_repository.dart'; import 'package:maibu_satabot_v2/features/devices/domain/usecases/get_user_device_usecase.dart'; import 'package:maibu_satabot_v2/features/devices/domain/usecases/select_work_record_usecase.dart'; import 'package:maibu_satabot_v2/features/devices/domain/usecases/unbind_device_usecase.dart'; import 'package:maibu_satabot_v2/features/devices/domain/usecases/update_devicename_usecase.dart'; import 'package:maibu_satabot_v2/features/devices/presentation/bloc/devices_cubit.dart'; import 'package:maibu_satabot_v2/features/devices/services/path_planning_service.dart'; import 'package:maibu_satabot_v2/features/my/presentation/bloc/my_cubit.dart'; import 'package:maibu_satabot_v2/features/my/repository/my_repository.dart'; import 'package:maibu_satabot_v2/features/my/repository/my_repository_impl.dart'; import 'package:maibu_satabot_v2/features/my/usecases/updatename_usecase.dart'; import 'package:maibu_satabot_v2/features/main_container/presentation/cubit/tab_config_cubit.dart'; import 'package:maibu_satabot_v2/features/v2/device_list/presentation/float_bar/cubit/float_bar_setting_cubit.dart'; import 'package:maibu_satabot_v2/features/remote_control/data/repositories/remote_control_repository_impl.dart'; import 'package:maibu_satabot_v2/features/remote_control/domain/repositories/remote_control_repository.dart'; import 'package:maibu_satabot_v2/features/remote_control/domain/usecase/diff_steer_usecase.dart'; import 'package:maibu_satabot_v2/features/remote_control/domain/usecase/request_control_permission_usecase.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../features/auth/data/datasources/auth_http_datasource.dart'; import '../../features/auth/data/datasources/auth_tcp_datasource.dart'; import '../../features/auth/data/datasources/impl/auth_http_datasource_impl.dart'; import '../../features/auth/data/datasources/impl/auth_tcp_datasource_impl.dart'; import '../../features/auth/data/repositories/auth_repository_impl.dart'; import '../../features/auth/domain/repositories/auth_repository.dart'; import '../../features/auth/domain/usecases/login_usecase.dart'; import '../../features/auth/presentation/bloc/auth_cubit.dart'; import '../../features/auth/presentation/bloc/login_bloc.dart'; import '../../features/auth/presentation/bloc/login_cubit.dart'; import '../../features/devices/data/datasources/device_http_datasource.dart'; import '../../features/devices/data/datasources/path_http_datasource.dart'; import '../../features/devices/data/repositories/device_hostriry_work_impl.dart'; import '../../features/devices/data/repositories/device_repository_impl.dart'; import '../../features/devices/data/repositories/generate_path_repository_Impl.dart'; import '../../features/devices/data/repositories/route_planning_repository_impl.dart'; import '../../features/devices/domain/repositories/device_hostrity_work_repository.dart'; import '../../features/devices/domain/repositories/path_repository.dart'; import '../../features/devices/domain/repositories/route_planning_repository.dart'; import '../../features/devices/domain/usecases/bind_device_usecase.dart'; import '../../features/devices/domain/usecases/delete_work_record_usecase.dart'; import '../../features/devices/domain/usecases/device_work_hostrirty_usecase.dart'; import '../../features/devices/domain/usecases/generate_path_usecase.dart'; import '../../features/devices/domain/usecases/get_device_location_usecase.dart'; import '../../features/devices/domain/usecases/get_work_record_usecase.dart'; import '../../features/devices/domain/usecases/get_work_records_by_site_id_usecase.dart'; import '../../features/devices/domain/usecases/create_device_task_usecase.dart'; import '../../features/devices/domain/usecases/route_planning_usecase.dart'; import '../../features/devices/domain/usecases/save_work_record_usecase.dart'; import '../../features/devices/domain/usecases/switch_device_usecase.dart'; import '../../features/devices/presentation/bloc/device_status_bloc.dart'; import '../../features/remote_control/data/datasources/remote_http_datasource.dart'; import '../../features/remote_control/data/datasources/remote_tcp_datasource.dart'; import '../../features/remote_control/presentation/bloc/remote_control_cubit.dart'; import '../../features/v2/home/data/datasources/home_remote_datasource.dart'; import '../../features/v2/home/data/datasources/site_datasource.dart'; import '../../features/v2/home/data/datasources/site_datasource_impl.dart'; import '../../features/v2/home/data/repositories/home_repository_impl.dart'; import '../../features/v2/home/data/repositories/site_repository_impl.dart'; import '../../features/v2/home/domain/repositories/home_repository.dart'; import '../../features/v2/home/domain/repositories/site_repository.dart'; import '../../features/v2/home/domain/usecases/get_home_data_usecase.dart'; import '../../features/v2/home/domain/usecases/get_site_list_usecase.dart'; import '../../features/v2/home/presentation/bloc/home_v2_bloc.dart'; import '../../features/v2/site/presentation/cubit/site_cubit.dart'; import '../../features/v2/device_list/data/datasources/device_remote_datasource.dart' as device_v2; import '../../features/v2/device_list/data/repositories/device_repository_impl.dart' as device_v2_repo; import '../../features/v2/device_list/domain/repositories/device_repository.dart' as device_v2_domain; import '../../features/v2/device_list/domain/usecases/get_device_status_data_usecase.dart' as device_v2_usecase; import '../../features/v2/device_list/presentation/bloc/device_status_bloc.dart' as device_v2_bloc; import '../../features/v2/device_list/data/datasources/drone_station_datasource.dart'; import '../../features/v2/device_list/data/datasources/drone_station_datasource_impl.dart'; import '../../features/v2/device_list/data/repositories/drone_station_repository_impl.dart'; import '../../features/v2/device_list/domain/repositories/drone_station_repository.dart'; import '../../features/v2/device_list/domain/usecases/get_drone_station_list_usecase.dart'; import '../../features/v2/device_list/domain/usecases/get_video_stream_usecase.dart'; import '../../features/v2/device_list/domain/usecases/get_uav_video_stream_usecase.dart'; import '../../features/v2/device_list/domain/usecases/update_flight_task_status_usecase.dart'; import '../../features/v2/device_list/domain/usecases/pause_flight_task_usecase.dart'; import '../../features/v2/device_list/domain/usecases/return_home_usecase.dart'; import '../../features/v2/device_list/presentation/bloc/drone_station_bloc.dart'; import '../../features/v2/device_list/presentation/bloc/robot_list_bloc.dart'; import '../../features/v2/device_list/presentation/bloc/device_realtime_bloc.dart'; import '../../features/v2/device_list/data/datasources/bind_device_datasource.dart'; import '../../features/v2/device_list/data/datasources/impl/bind_device_datasource_impl.dart'; import '../../features/v2/device_list/data/repositories/bind_device_repository_impl.dart'; import '../../features/v2/device_list/domain/repositories/bind_device_repository.dart'; import '../../features/v2/device_list/domain/usecases/bind_device_usecases.dart'; import '../../features/v2/device_list/presentation/cubit/bind_device_cubit.dart'; import '../../features/v2/waring_center/data/datasources/alarm_remote_datasource.dart'; import '../../features/v2/waring_center/data/datasources/impl/alarm_remote_datasource_impl.dart'; import '../../features/v2/waring_center/data/repositories/alarm_repository_impl.dart'; import '../../features/v2/waring_center/domain/repositories/alarm_repository.dart'; import '../../features/v2/waring_center/domain/usecases/get_alarm_count_usecase.dart'; import '../../features/v2/waring_center/domain/usecases/get_alarm_list_usecase.dart'; import '../../features/v2/waring_center/presentation/bloc/alarm_cubit.dart'; import '../../features/v2/waring_center/data/datasources/alarm_detail_remote_datasource.dart'; import '../../features/v2/waring_center/data/datasources/impl/alarm_detail_remote_datasource_impl.dart'; import '../../features/v2/waring_center/data/repositories/alarm_detail_repository_impl.dart'; import '../../features/v2/waring_center/domain/repositories/alarm_detail_repository.dart'; import '../../features/v2/waring_center/domain/usecases/get_alarm_detail_usecase.dart'; import '../../features/v2/waring_center/domain/usecases/alarm_actions_usecase.dart'; import '../../features/v2/waring_center/presentation/bloc/alarm_detail_cubit.dart'; import '../../features/v2/message_center/data/datasources/message_center_remote_datasource.dart'; import '../../features/v2/message_center/data/datasources/impl/message_center_remote_datasource_impl.dart'; import '../../features/v2/message_center/data/repositories/message_center_repository_impl.dart'; import '../../features/v2/message_center/domain/repositories/message_center_repository.dart'; import '../../features/v2/message_center/domain/usecases/message_center_usecase.dart'; import '../../features/v2/message_center/presentation/bloc/message_center_cubit.dart'; import '../../features/v2/work_order/data/datasources/work_order_remote_datasource.dart'; import '../../features/v2/work_order/data/datasources/work_order_remote_datasource_impl.dart'; import '../../features/v2/work_order/data/repositories/work_order_repository_impl.dart'; import '../../features/v2/work_order/domain/repositories/work_order_repository.dart'; import '../../features/v2/work_order/domain/usecases/work_order_usecases.dart'; import '../../features/v2/work_order/presentation/cubit/work_order_cubit.dart'; import '../../features/v2/device_run_param/data/datasources/device_run_param_remote_datasource.dart'; import '../../features/v2/device_run_param/data/datasources/device_run_param_remote_datasource_impl.dart'; import '../../features/v2/device_run_param/data/repositories/device_run_param_repository_impl.dart'; import '../../features/v2/device_run_param/domain/repositories/device_run_param_repository.dart'; import '../../features/v2/device_run_param/domain/usecases/device_run_param_usecases.dart'; import '../services/device_permission_service.dart'; import '../../features/devices/data/datasources/device_task_datasource.dart'; import '../../features/devices/data/repositories/device_task_repository_impl.dart'; import '../../features/devices/domain/repositories/device_task_repository.dart'; import '../../features/devices/domain/usecases/get_device_task_pool_usecase.dart'; import '../../features/devices/domain/usecases/cancel_task_usecase.dart'; import '../../features/devices/domain/usecases/pause_task_usecase.dart'; import '../../features/devices/domain/usecases/recovery_task_usecase.dart'; import '../../features/devices/presentation/bloc/device_task_cubit.dart'; import '../app/app_user_cubit.dart'; import '../localization/locale_cubit.dart'; import '../theme/theme_cubit.dart'; import '../../features/home/presentation/bloc/permission_request_bloc.dart'; import '../network/dio_client.dart'; import '../network/net_message_dispatcher.dart'; import '../network/tcp/tcp_client.dart'; import '../network/tcp/tcp_status_cubit.dart'; import '../network/mqtt/domain/interfaces/mqtt_client.dart'; import '../network/mqtt/data/infrastructure/mqtt_client_impl.dart'; import '../network/mqtt/data/datasources/drone_osd_datasource.dart'; import '../network/mqtt/data/datasources/task_message_datasource.dart'; import '../network/mqtt/domain/repositories/drone_osd_repository.dart'; import '../network/mqtt/domain/repositories/task_message_repository.dart'; import '../network/mqtt/data/repositories/drone_osd_repository_impl.dart'; import '../network/mqtt/data/repositories/task_message_repository_impl.dart'; import '../router/app_router.dart'; import '../storage/impl/user_storage_impl.dart'; import '../storage/user_storage.dart'; final sl = GetIt.instance; Future init() async { /// 1. 底层工具与存储 (最底层) /// 1.1 --- Network --- /// 1.1.1 Dio:Http客户端 sl.registerLazySingleton(() => DioClient.create()); /// 1.1.2 TcpClient:TCP客户端 sl.registerLazySingleton( () => TcpClient( sl(), getUserDeviceUseCase: sl(), switchDeviceUseCase: sl(), ), ); sl.registerLazySingleton(() => PathPlanningService()); /// 1.1.3 MQTT Clients - 两个独立的 MQTT 客户端实例 sl.registerLazySingleton( () => MqttClientImpl(), instanceName: 'droneOsdClient', ); sl.registerLazySingleton( () => MqttClientImpl(), instanceName: 'taskMessageClient', ); /// 1.1.4 NetMessageDispatcher:消息调度器,并将 TcpClient 注入给它 sl.registerLazySingleton( () => NetMessageDispatcher( sl(), sl(), sl(), getAppState: () => sl().state.appState, ), ); /// 1.2 --- 本地存储 (LocalStorage) --- /// 1.2.1 SharedPreferences:本地存储库 final sharedPrefs = await SharedPreferences.getInstance(); sl.registerLazySingleton(() => sharedPrefs); /// 1.2.2 UserStorage:用户存储库 sl.registerLazySingleton( // 必须先注册上面本地存储库的实例 () => UserStorageImpl(sl()), ); /// 1.3 Log工具Sentry sl.registerLazySingleton(() => SentryLoggerImpl()); /// 1.4 --- Route Observer (路由监听器) --- sl.registerLazySingleton( () => RouteObserver>(), ); /// 1.5 --- MQTT Data Sources --- /// 改为 LazySingleton:列表页预启动订阅和详情页共享同一实例,stream 互通 sl.registerLazySingleton( () => DroneOsdDataSourceImpl(sl(instanceName: 'droneOsdClient')), ); sl.registerFactory( () => TaskMessageDataSourceImpl( sl(instanceName: 'taskMessageClient'), ), ); /// 1.5 --- MQTT Repositories --- sl.registerLazySingleton( () => DroneOsdRepositoryImpl(sl()), ); sl.registerLazySingleton( () => TaskMessageRepositoryImpl(sl()), ); /// 2. 数据源 (DataSource) sl.registerLazySingleton( () => AuthHttpDataSourceImpl(sl()), ); sl.registerLazySingleton( () => DeviceHttpDatasourceImpl(sl(), sl()), // ); sl.registerLazySingleton( () => RemoteHttpDatasource(sl(), sl()), ); sl.registerLazySingleton( () => RemoteTcpDatasource(sl(), sl()), ); /// 3. 仓库 (Repository) sl.registerLazySingleton( () => AuthRepositoryImpl( httpRemote: sl(), // 自动寻找已注册的 LoginRemoteDataSource localTokenStorage: sl(), // 自动寻找已注册的 TokenStorage ), ); // 1. 注册 UpdateNameUsecase sl.registerLazySingleton( () => UpdateNameUsecase(sl()), // 注入 MyRepository 实例 ); sl.registerLazySingleton( () => MyRepositoryImpl( userStorage: sl(), // 注入 UserStorage ), ); // 2. 注册 MyCubit sl.registerLazySingleton( () => MyCubit( sl(), // 注入仓库 sl(), // 注入 UseCase ), ); sl.registerLazySingleton( () => RoutePlanningRepositoryImpl(tcp: sl()), // ); sl.registerLazySingleton( () => RoutePlanningUseCase(sl()), // ); //工作历史 sl.registerLazySingleton( () => DeviceHostrityWorkRepositoryImpl( client: sl(), // 使用 Dio 实例 userStorage: sl(), ), ); sl.registerLazySingleton(() => DeviceRepositoryImpl(sl())); sl.registerLazySingleton( () => RemoteControlRepositoryImpl(sl(), sl(), sl(), sl()), ); /// 4. 用例 (UseCase) sl.registerLazySingleton(() => LoginUseCase(sl())); sl.registerLazySingleton(() => GetUserDeviceUseCase(sl())); sl.registerLazySingleton(() => DiffSteerUseCase()); sl.registerLazySingleton(() => DeviceWorkHostrirty(sl())); sl.registerLazySingleton( () => SelectWorkRecordUseCase(sl()), ); sl.registerLazySingleton(() => UnbindDeviceUseCase(sl())); sl.registerLazySingleton(() => BindDeviceUseCase(sl())); sl.registerLazySingleton(() => UpdateDevicenameUsecase(sl())); sl.registerLazySingleton( () => SaveWorkRecordUseCase(sl()), ); sl.registerLazySingleton( () => SwitchDeviceUseCase(sl()), ); sl.registerLazySingleton( () => AuthTcpDatasourceImpl( sl(), sl(), getUserDeviceUseCase: sl(), switchDeviceUseCase: sl(), ), ); sl.registerLazySingleton( () => RequestControlPermissionUseCase(sl()), ); /// Home V2 sl.registerLazySingleton( () => HomeRemoteDataSourceImpl(), ); sl.registerLazySingleton(() => HomeRepositoryImpl(sl())); sl.registerLazySingleton(() => GetHomeDataUseCase(sl())); // Site (场站) sl.registerLazySingleton( () => SiteDataSourceImpl(sl(), sl(), sl()), ); sl.registerLazySingleton(() => SiteRepositoryImpl(sl())); sl.registerLazySingleton(() => GetSiteListUseCase(sl())); sl.registerFactory( () => HomeV2Bloc(sl(), sl(), sl(), sl()), ); /// Device Status V2 sl.registerLazySingleton( () => device_v2.DeviceRemoteDataSourceImpl(sl()), ); sl.registerLazySingleton( () => device_v2_repo.DeviceRepositoryImpl(remoteDataSource: sl()), ); sl.registerLazySingleton( () => device_v2_usecase.GetDeviceStatusDataUseCase(repository: sl()), ); sl.registerFactory( () => device_v2_bloc.DeviceStatusBloc(sl()), ); /// Drone Station V2 sl.registerLazySingleton( () => DroneStationDataSourceImpl(sl()), ); sl.registerLazySingleton( () => DroneStationRepositoryImpl(sl()), ); sl.registerLazySingleton( () => GetDroneStationListUseCase(sl()), ); sl.registerLazySingleton( () => GetUAVDetailUseCase(sl()), ); sl.registerLazySingleton( () => GetVideoStreamUseCase(sl()), ); sl.registerLazySingleton( () => GetUavVideoStreamUseCase(sl()), ); sl.registerLazySingleton( () => UpdateFlightTaskStatusUseCase(sl()), ); sl.registerLazySingleton( () => PauseFlightTaskUseCase(sl()), ); sl.registerLazySingleton(() => ReturnHomeUseCase(sl())); sl.registerFactory( () => DroneStationBloc(sl(), sl(), sl(), sl()), ); /// Robot List V2 sl.registerFactory(() => RobotListBloc(sl())); /// Device Realtime V2 (MQTT) sl.registerFactory( () => DeviceRealtimeBloc(sl()), ); /// Alarm Center V2 sl.registerLazySingleton( () => AlarmRemoteDataSourceImpl(sl()), ); sl.registerLazySingleton(() => AlarmRepositoryImpl(sl())); sl.registerLazySingleton( () => GetAlarmListUseCase(sl()), ); sl.registerLazySingleton( () => GetAlarmCountUseCase(sl()), ); sl.registerFactory(() => AlarmCubit(getAlarmListUseCase: sl())); /// Alarm Detail V2 sl.registerLazySingleton( () => AlarmDetailRemoteDataSourceImpl(sl()), ); sl.registerLazySingleton( () => AlarmDetailRepositoryImpl(sl()), ); sl.registerLazySingleton( () => GetAlarmDetailUseCase(sl()), ); sl.registerLazySingleton( () => ConfirmAlarmUseCase(sl()), ); sl.registerLazySingleton(() => HandleAlarmUseCase(sl())); sl.registerLazySingleton(() => AIDiagnosisUseCase(sl())); sl.registerFactory( () => AlarmDetailCubit( getAlarmDetailUseCase: sl(), confirmAlarmUseCase: sl(), handleAlarmUseCase: sl(), aiDiagnosisUseCase: sl(), ), ); /// 5. 状态管理 (Cubit/Bloc) sl.registerLazySingleton(() => AppUserCubit()); // AuthCubit 依赖它,必须先注册 // TCP状态管理 Cubit sl.registerLazySingleton(() => TcpStatusCubit()); // 🔥 SiteCubit (全局共享,持久化选中场站) sl.registerLazySingleton(() => SiteCubit(sl())); // 🔥 FloatBarSettingService (全局共享,控制悬浮条显示) sl.registerLazySingleton( () => FloatBarSettingService(sl()), ); // 🔥 语言管理 Cubit (单例) sl.registerLazySingleton(() => LocaleCubit()); // 🔥 主题管理 Cubit (单例,管理亮/暗/跟随系统) sl.registerLazySingleton(() => ThemeCubit()); // Tab 配置 Cubit (单例) sl.registerLazySingleton(() => TabConfigCubit(sl())); sl.registerLazySingleton(() => GetDeviceLocationUseCase(sl())); sl.registerLazySingleton( () => DevicesCubit( sl(), // repository sl(), // GetUserDeviceUseCase sl(), // GetDeviceLocationUseCase sl(), // GetWorkRecordUseCase sl(), // GetWorkRecordsBySiteIdUseCase (NEW) sl(), // DeleteWorkRecordUseCase sl(), // UnbindDeviceUseCase sl(), // UpdateDevicenameUsecase sl(), // SelectWorkRecordUseCase sl(), // SaveWorkRecordUseCase sl(), // GeneratePathUseCase sl(), // RoutePlanningUseCase sl(), // BindDeviceUseCase sl(), // DeviceStatusBloc sl(), // TcpClient sl(), // PathPlanningService ), ); // DeviceStatusBloc 必须在 RemoteControlCubit 之前注册(单例) sl.registerLazySingleton( () => DeviceStatusBloc( sl(), client: sl(), // 🔥 传入 TcpClient ), ); // 🔥 RemoteControlCubit 注入 DeviceStatusBloc(单例模式,全局共享) sl.registerLazySingleton( () => RemoteControlCubit( sl(), // RemoteControlRepository sl(), // RequestControlPermissionUseCase sl(), // DeviceRepository sl(), // TcpClient sl(), // NetMessageDispatcher sl(), // DeviceStatusBloc ), ); // 🔥 PermissionRequestBloc 用于首页权限弹窗(单例,通过 NetMessageDispatcher 监听) sl.registerLazySingleton( () => PermissionRequestBloc( sl(), sl(), ), ); /// . 路径生成 sl.registerLazySingleton( () => PathHttpDatasourceImpl( // 需先注册 http.Client(见下方) sl(), ), ); sl.registerLazySingleton( () => PathRepositoryImpl(datasource: sl()), ); sl.registerLazySingleton( () => GeneratePathUseCaseImpl(sl()), ); ///.路径获取和删除 sl.registerLazySingleton(() => GetWorkRecordUseCase(sl())); sl.registerLazySingleton(() => DeleteWorkRecordUseCase(sl())); /// 根据场站ID获取工作记录(XML格式) sl.registerLazySingleton( () => GetWorkRecordsBySiteIdUseCase(sl()), ); /// 创建设备任务(通过接口执行作业) sl.registerLazySingleton(() => CreateDeviceTaskUseCase(sl())); /// 6. 认证 (Auth) // --- 关键修改点 1: AuthCubit 必须在 GoRouter 之前注册,并传入参数 --- sl.registerLazySingleton( () => AuthCubit( sl(), sl(), sl(), sl(), sl(), ), ); /// 7. 路由 (Router) sl.registerSingleton(createRouter(sl())); /// 8. 页面级 Bloc/Cubit (Factory) sl.registerFactory(() => LoginBloc(sl())); sl.registerFactory(() => LoginCubit(sl(), sl())); /// 9. 消息中心 (Message Center) sl.registerLazySingleton( () => MessageCenterRemoteDataSourceImpl(), ); sl.registerLazySingleton( () => MessageCenterRepositoryImpl(sl()), ); sl.registerLazySingleton( () => GetMessageListUseCase(sl()), ); sl.registerLazySingleton( () => MarkAllAsReadUseCase(sl()), ); sl.registerFactory( () => MessageCenterCubit( getMessageListUseCase: sl(), markAllAsReadUseCase: sl(), ), ); /// 10. 设备任务管理 (Device Task) sl.registerLazySingleton( () => DeviceTaskDatasourceImpl(sl()), ); sl.registerLazySingleton( () => DeviceTaskRepositoryImpl(datasource: sl()), ); sl.registerLazySingleton(() => GetDeviceTaskPoolUseCase(sl())); sl.registerLazySingleton(() => CancelTaskUseCase(sl())); sl.registerLazySingleton(() => PauseTaskUseCase(sl())); sl.registerLazySingleton(() => RecoveryTaskUseCase(sl())); sl.registerLazySingleton(() => DeviceTaskCubit(sl(), sl(), sl(), sl())); /// 11. 工单管理 (Work Order) sl.registerLazySingleton( () => WorkOrderRemoteDataSourceImpl(sl()), ); sl.registerLazySingleton( () => WorkOrderRepositoryImpl(remoteDataSource: sl()), ); sl.registerLazySingleton( () => GetWorkOrderListUseCase(sl()), ); sl.registerLazySingleton( () => GetWorkOrderDetailUseCase(sl()), ); sl.registerLazySingleton( () => DispatchWorkOrderUseCase(sl()), ); sl.registerLazySingleton( () => SuspendWorkOrderUseCase(sl()), ); sl.registerLazySingleton( () => CompleteWorkOrderUseCase(sl()), ); sl.registerLazySingleton( () => StartWorkOrderUseCase(sl()), ); sl.registerFactory( () => WorkOrderCubit( getWorkOrderListUseCase: sl(), getWorkOrderDetailUseCase: sl(), dispatchWorkOrderUseCase: sl(), suspendWorkOrderUseCase: sl(), completeWorkOrderUseCase: sl(), startWorkOrderUseCase: sl(), ), ); /// 12. 设备运行参数管理 (Device Run Param) sl.registerLazySingleton( () => DeviceRunParamRemoteDataSourceImpl(sl()), ); sl.registerLazySingleton( () => DeviceRunParamRepositoryImpl(remoteDataSource: sl()), ); sl.registerLazySingleton( () => GetDeviceRunParamUseCase(sl()), ); sl.registerLazySingleton( () => SaveDeviceRunParamUseCase(sl()), ); /// 13. 设备操作权限校验服务 (Device Permission Service) sl.registerLazySingleton( () => DevicePermissionService(sl()), ); /// 14. 绑定智能装备 (Bind Device) sl.registerLazySingleton( () => BindDeviceDatasourceImpl(sl()), ); sl.registerLazySingleton( () => BindDeviceRepositoryImpl(sl()), ); sl.registerLazySingleton(() => GetOrgListUseCase(sl())); sl.registerLazySingleton( () => GetSitesByOrgUseCase(sl()), ); sl.registerLazySingleton( () => GetUsersBySiteUseCase(sl()), ); sl.registerLazySingleton( () => BindDeviceV2UseCase(sl()), ); sl.registerLazySingleton( () => IsDeviceAtSiteUseCase(sl()), ); sl.registerFactory( () => BindDeviceCubit(sl(), sl(), sl(), sl(), sl(), sl()), ); }