uto_manager/lib/main.dart

102 lines
3.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:uto_manager/application/blocs/personnel_cubit.dart';
import 'package:uto_manager/application/blocs/template_cubit.dart';
import 'package:uto_manager/application/blocs/unit_tree_cubit.dart';
import 'package:uto_manager/application/blocs/validation_cubit.dart';
import 'package:uto_manager/domain/services/assignment_service.dart';
import 'package:uto_manager/domain/services/unit_tree_service.dart';
import 'package:uto_manager/infrastructure/database/app_database.dart';
import 'package:uto_manager/infrastructure/repositories/drift_personnel_repository.dart';
import 'package:uto_manager/infrastructure/repositories/drift_position_slot_repository.dart';
import 'package:uto_manager/infrastructure/repositories/drift_soldier_positions_repository.dart';
import 'package:uto_manager/infrastructure/repositories/drift_unit_repository.dart';
import 'package:uto_manager/presentation/screens/home_screen.dart';
void main() {
runApp(const UtoManagerApp());
}
/// The root application widget for the UTO Manager.
///
/// Wires together the database, repositories, domain services, and BLoC
/// providers before handing off to the [HomeScreen].
class UtoManagerApp extends StatefulWidget {
const UtoManagerApp({super.key});
@override
State<UtoManagerApp> createState() => _UtoManagerAppState();
}
class _UtoManagerAppState extends State<UtoManagerApp> {
late final AppDatabase _db;
late final DriftUnitRepository _unitRepo;
late final DriftPersonnelRepository _personnelRepo;
late final DriftPositionSlotRepository _slotRepo;
late final DriftSoldierPositionsRepository _positionsRepo;
late final UnitTreeService _treeService;
late final AssignmentService _assignmentService;
@override
void initState() {
super.initState();
_db = AppDatabase();
_unitRepo = DriftUnitRepository(dao: _db.unitDao, db: _db);
_personnelRepo = DriftPersonnelRepository(dao: _db.personnelDao);
_slotRepo = DriftPositionSlotRepository(dao: _db.positionSlotDao);
_positionsRepo = DriftSoldierPositionsRepository(dao: _db.soldierPositionsDao);
_treeService = const UnitTreeService();
_assignmentService = AssignmentService(treeService: _treeService);
}
@override
void dispose() {
_db.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<UnitTreeCubit>(
create: (_) => UnitTreeCubit(
unitRepository: _unitRepo,
slotRepository: _slotRepo,
treeService: _treeService,
)..startWatching(),
),
BlocProvider<PersonnelCubit>(
create: (_) => PersonnelCubit(
personnelRepository: _personnelRepo,
slotRepository: _slotRepo,
assignmentService: _assignmentService,
)..startWatching(),
),
BlocProvider<TemplateCubit>(
create: (_) => TemplateCubit(
dao: _db.templateDao,
unitRepository: _unitRepo,
slotRepository: _slotRepo,
)..loadTemplates(),
),
BlocProvider<ValidationCubit>(
create: (_) => ValidationCubit(),
),
],
child: MaterialApp(
title: 'UTO Manager',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF1B3A6B),
brightness: Brightness.dark,
),
useMaterial3: true,
),
home: HomeScreen(positionsRepository: _positionsRepo),
),
);
}
}