import 'package:dio/dio.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/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/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:shared_preferences/shared_preferences.dart'; import '../../features/auth/data/datasources/auth_http_datasource.dart'; import '../../features/auth/data/datasources/impl/auth_http_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/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/domain/repositories/device_hostrity_work_repository.dart'; import '../../features/devices/domain/repositories/path_repository.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/save_work_record_usecase.dart'; import '../../features/devices/domain/usecases/select_work_record_usecase.dart'; import '../../features/remote_control/presentation/bloc/remote_control_cubit.dart'; import '../app/app_user_cubit.dart'; import '../network/dio_client.dart'; import '../network/net_message_dispatcher.dart'; import '../network/tcp/tcp_client.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()); /// 1.1.3 NetMessageDispatcher:消息调度器,并将 TcpClient 注入给它 sl.registerLazySingleton(() => NetMessageDispatcher(sl())); /// 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()); /// 2. 数据源 (DataSource) sl.registerLazySingleton( () => AuthHttpDataSourceImpl(sl()), ); sl.registerLazySingleton( () => DeviceHttpDatasourceImpl(sl()), ); /// 3. 仓库 (Repository) sl.registerLazySingleton( () => AuthRepositoryImpl( httpRemote: sl(), // 自动寻找已注册的 LoginRemoteDataSource localTokenStorage: sl(), // 自动寻找已注册的 TokenStorage ), ); //工作历史 sl.registerLazySingleton( () => DeviceHostrityWorkRepositoryImpl( client: sl(), // 使用 Dio 实例 userStorage: sl(), ), ); sl.registerLazySingleton(() => DeviceRepositoryImpl(sl())); sl.registerLazySingleton( () => RemoteControlRepositoryImpl(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(() => UpdateDevicenameUsecase(sl())); sl.registerLazySingleton(() => SaveWorkRecordUseCase(sl())); /// 5. 状态管理 (Cubit/Bloc) sl.registerLazySingleton(() => AppUserCubit()); // AuthCubit 依赖它,必须先注册 sl.registerLazySingleton(() => GetDeviceLocationUseCase(sl())); sl.registerLazySingleton( () => DevicesCubit(sl(), sl(), sl(), sl(), sl(), sl(), sl(), sl(), sl(),sl()), ); sl.registerFactory(() => RemoteControlCubit(sl())); /// . 路径生成 sl.registerLazySingleton(() => PathRepositoryImpl()); sl.registerLazySingleton( () => GeneratePathUseCaseImpl(sl()), ); ///.路径获取和删除 sl.registerLazySingleton(() => GetWorkRecordUseCase(sl())); sl.registerLazySingleton(() => DeleteWorkRecordUseCase(sl())); /// 6. 认证 (Auth) // --- 关键修改点 1: AuthCubit 必须在 GoRouter 之前注册,并传入参数 --- sl.registerLazySingleton( () => AuthCubit( sl(), sl(), sl(), sl(), ), ); /// 7. 路由 (Router) sl.registerSingleton(createRouter(sl())); /// 8. 页面级 Bloc/Cubit (Factory) sl.registerFactory(() => LoginBloc(sl())); sl.registerFactory(() => LoginCubit(sl(), sl())); }