102 lines
3.7 KiB
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),
|
|
),
|
|
);
|
|
}
|
|
}
|