Files
COPILOT/copilot_keyboard/lib/injection_container.dart
klas 40143734fc Initial commit: COPILOT D6 Flutter keyboard controller
Flutter web app replacing legacy WPF CCTV surveillance keyboard controller.
Includes wall overview, section view with monitor grid, camera input,
PTZ control, alarm/lock/sequence BLoCs, and legacy-matching UI styling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:57:38 +01:00

124 lines
3.9 KiB
Dart

import 'package:get_it/get_it.dart';
import 'config/app_config.dart';
import 'data/services/bridge_service.dart';
import 'data/services/alarm_service.dart';
import 'data/services/coordination_service.dart';
import 'data/services/function_button_service.dart';
import 'data/services/state_service.dart';
import 'presentation/blocs/connection/connection_bloc.dart';
import 'presentation/blocs/camera/camera_bloc.dart';
import 'presentation/blocs/monitor/monitor_bloc.dart';
import 'presentation/blocs/ptz/ptz_bloc.dart';
import 'presentation/blocs/alarm/alarm_bloc.dart';
import 'presentation/blocs/lock/lock_bloc.dart';
import 'presentation/blocs/sequence/sequence_bloc.dart';
import 'presentation/blocs/wall/wall_bloc.dart';
final sl = GetIt.instance;
/// Initialize all dependencies
Future<void> initializeDependencies() async {
// Config
final config = await AppConfig.load();
sl.registerSingleton<AppConfig>(config);
// Services
sl.registerLazySingleton<BridgeService>(() => BridgeService());
sl.registerLazySingleton<AlarmService>(() => AlarmService());
sl.registerLazySingleton<StateService>(() => StateService(
bridgeService: sl<BridgeService>(),
alarmService: sl<AlarmService>(),
));
sl.registerLazySingleton<CoordinationService>(() => CoordinationService());
sl.registerLazySingleton<FunctionButtonService>(() => FunctionButtonService(
bridgeService: sl<BridgeService>(),
coordinationService: sl<CoordinationService>(),
));
// BLoCs
sl.registerFactory<ConnectionBloc>(() => ConnectionBloc(
bridgeService: sl<BridgeService>(),
config: sl<AppConfig>(),
));
sl.registerFactory<CameraBloc>(() => CameraBloc(
bridgeService: sl<BridgeService>(),
config: sl<AppConfig>(),
));
sl.registerFactory<MonitorBloc>(() => MonitorBloc(
stateService: sl<StateService>(),
config: sl<AppConfig>(),
));
sl.registerFactory<PtzBloc>(() => PtzBloc(
bridgeService: sl<BridgeService>(),
coordinationService: sl<CoordinationService>(),
));
sl.registerFactory<AlarmBloc>(() => AlarmBloc(
alarmService: sl<AlarmService>(),
stateService: sl<StateService>(),
));
sl.registerFactory<LockBloc>(() => LockBloc(
coordinationService: sl<CoordinationService>(),
keyboardId: sl<AppConfig>().keyboardId,
));
sl.registerFactory<SequenceBloc>(() => SequenceBloc(
coordinationService: sl<CoordinationService>(),
));
sl.registerFactory<WallBloc>(() => WallBloc(
bridgeService: sl<BridgeService>(),
));
}
/// Initialize services (call after dependencies are set up)
Future<void> initializeServices() async {
final config = sl<AppConfig>();
final bridgeService = sl<BridgeService>();
final alarmService = sl<AlarmService>();
final stateService = sl<StateService>();
final coordinationService = sl<CoordinationService>();
// Initialize services with config
await bridgeService.initialize(config.servers);
await alarmService.initialize(config.servers);
await stateService.initialize();
await coordinationService.initialize(config.coordinatorUrl, config.keyboardId);
// Load function button config
sl<FunctionButtonService>().loadConfig(config.functionButtons);
// Wire reconnection callback: resync state when a bridge comes back online
bridgeService.onReconnected = (serverId) {
stateService.syncFromBridges();
};
// Connect to all bridges
await bridgeService.connectAll();
// Sync initial state
await stateService.syncFromBridges();
// Start periodic alarm sync
alarmService.startPeriodicSync(
Duration(seconds: config.alarmSyncIntervalSeconds),
);
// Connect to coordinator (non-blocking, auto-reconnects)
coordinationService.connect();
}
/// Dispose all services
void disposeServices() {
sl<CoordinationService>().dispose();
sl<AlarmService>().dispose();
sl<StateService>().dispose();
sl<BridgeService>().dispose();
}