Lorsqu'on termine la session et qu'on a l'écran d'accueil > exécuter un refresh automatique pour prendre en compte cette dernière sessions dans les star de l'écran d'accueil. Actuellement il faut refresh manuellement pour que ce soit pris en compte
This commit is contained in:
@@ -19,6 +19,7 @@ class _WeaponDetailScreenState extends State<WeaponDetailScreen> {
|
||||
late Weapon _weapon;
|
||||
List<MaintenanceEntry> _maintenance = [];
|
||||
int _totalRounds = 0;
|
||||
int _sessionCount = 0;
|
||||
bool _isLoading = true;
|
||||
|
||||
@override
|
||||
@@ -32,10 +33,12 @@ class _WeaponDetailScreenState extends State<WeaponDetailScreen> {
|
||||
final repository = context.read<SessionRepository>();
|
||||
final history = await repository.getMaintenanceHistory(_weapon.id);
|
||||
final rounds = await repository.getRoundsFiredForWeapon(_weapon.id);
|
||||
final sessions = await repository.getSessionCountForWeapon(_weapon.id);
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_maintenance = history;
|
||||
_totalRounds = rounds;
|
||||
_sessionCount = sessions;
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
@@ -93,7 +96,7 @@ class _WeaponDetailScreenState extends State<WeaponDetailScreen> {
|
||||
Expanded(
|
||||
child: _buildStatCard(
|
||||
'Sessions',
|
||||
'N/A',
|
||||
_sessionCount.toString(),
|
||||
Icons.history,
|
||||
Colors.orange,
|
||||
),
|
||||
@@ -347,6 +350,7 @@ class _WeaponDetailScreenState extends State<WeaponDetailScreen> {
|
||||
void _showAddMaintenanceDialog(BuildContext context) async {
|
||||
final descController = TextEditingController();
|
||||
MaintenanceType selectedType = MaintenanceType.cleaning;
|
||||
DateTime selectedDate = DateTime.now();
|
||||
|
||||
final result = await showDialog<bool>(
|
||||
context: context,
|
||||
@@ -367,6 +371,27 @@ class _WeaponDetailScreenState extends State<WeaponDetailScreen> {
|
||||
decoration: const InputDecoration(labelText: 'Description', hintText: 'ex: Nettoyage complet après séance'),
|
||||
maxLines: 2,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
final picked = await showDatePicker(
|
||||
context: context,
|
||||
initialDate: selectedDate,
|
||||
firstDate: DateTime(2000),
|
||||
lastDate: DateTime.now(),
|
||||
);
|
||||
if (picked != null) {
|
||||
setState(() => selectedDate = picked);
|
||||
}
|
||||
},
|
||||
child: InputDecorator(
|
||||
decoration: const InputDecoration(
|
||||
labelText: 'Date',
|
||||
suffixIcon: Icon(Icons.calendar_today, size: 18),
|
||||
),
|
||||
child: Text(DateFormat('dd/MM/yyyy').format(selectedDate)),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
@@ -384,6 +409,7 @@ class _WeaponDetailScreenState extends State<WeaponDetailScreen> {
|
||||
type: selectedType,
|
||||
description: descController.text,
|
||||
roundsSinceLast: _totalRounds,
|
||||
date: selectedDate,
|
||||
);
|
||||
_loadData();
|
||||
}
|
||||
|
||||
@@ -25,12 +25,43 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
List<Session> _recentSessions = [];
|
||||
bool _isLoading = true;
|
||||
|
||||
SessionProvider? _sessionProvider;
|
||||
bool _wasSessionActive = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_loadStats();
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
final provider = context.read<SessionProvider>();
|
||||
if (provider != _sessionProvider) {
|
||||
_sessionProvider?.removeListener(_onSessionChanged);
|
||||
_sessionProvider = provider;
|
||||
_sessionProvider!.addListener(_onSessionChanged);
|
||||
_wasSessionActive = provider.isSessionActive;
|
||||
}
|
||||
}
|
||||
|
||||
void _onSessionChanged() {
|
||||
final isActive = _sessionProvider?.isSessionActive ?? false;
|
||||
// Quand une session vient de se terminer, on rafraîchit les stats
|
||||
// automatiquement pour prendre en compte la dernière session.
|
||||
if (_wasSessionActive && !isActive) {
|
||||
_loadStats();
|
||||
}
|
||||
_wasSessionActive = isActive;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_sessionProvider?.removeListener(_onSessionChanged);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> _loadStats() async {
|
||||
final repository = context.read<SessionRepository>();
|
||||
final stats = await repository.getStatistics();
|
||||
|
||||
Reference in New Issue
Block a user