chore(wip): consolidation intermédiaire multi-tickets (sprints Statistiques, UI, Bug resolution, Serveur-client)

Regroupe l'état de travail en cours réalisé dans un même worktree sur
plusieurs tickets/sprints (#85, #136, #145, #155-160, #162-164),
mélangeant des tickets QA et inProgress. Ne constitue pas une feature
terminée : commit de sauvegarde avant triage/split par ticket en
branches feature/* dédiées. Exclut les dossiers d'environnement de
build locaux et le heap dump parasite (.gitignore mis à jour).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 16:48:54 +02:00
parent 58272e354a
commit 917777e18b
279 changed files with 13546 additions and 674 deletions

View File

@ -8,6 +8,7 @@ import 'package:share_plus/share_plus.dart';
import '../application/application.dart';
import '../domain/domain.dart';
import 'share_inbox_screen.dart';
import 'share_screen.dart';
import 'theme.dart';
final class ProfileScreen extends StatefulWidget {
@ -69,6 +70,7 @@ final class _ProfileScreenState extends State<ProfileScreen> {
syncUseCases: widget.syncUseCases,
onLogout: () => _confirmLogout(context),
onShares: () => _openReceivedShares(context),
onSharePack: () => _openSharePack(context),
dataExportUseCase: widget.dataExportUseCase,
dataImportUseCase: widget.dataImportUseCase,
backupFileExporter: widget.backupFileExporter,
@ -153,6 +155,18 @@ final class _ProfileScreenState extends State<ProfileScreen> {
);
}
void _openSharePack(BuildContext context) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => SharePackSelectionScreen(
shareUseCases: widget.shareUseCases,
authUseCases: widget.authUseCases,
syncUseCases: widget.syncUseCases,
),
),
);
}
void _reloadSession() {
setState(() {
_session = widget.authUseCases.currentSession();
@ -258,6 +272,7 @@ final class _SignedInProfile extends StatelessWidget {
required this.syncUseCases,
required this.onLogout,
required this.onShares,
required this.onSharePack,
required this.dataExportUseCase,
required this.dataImportUseCase,
required this.backupFileExporter,
@ -268,6 +283,7 @@ final class _SignedInProfile extends StatelessWidget {
final SyncUseCases syncUseCases;
final VoidCallback onLogout;
final VoidCallback onShares;
final VoidCallback onSharePack;
final DataExportUseCase dataExportUseCase;
final DataImportUseCase dataImportUseCase;
final LocalBackupFileExporter backupFileExporter;
@ -320,18 +336,34 @@ final class _SignedInProfile extends StatelessWidget {
),
const SizedBox(height: 12),
CourtBlazerAccentPanel(
child: Material(
type: MaterialType.transparency,
child: ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.inbox_outlined),
title: const Text('Partages reçus'),
subtitle: const Text(
"Programmes et séances reçus d'autres comptes",
child: Column(
children: [
Material(
type: MaterialType.transparency,
child: ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.inventory_2_outlined),
title: const Text('Partager un pack'),
subtitle: const Text('Envoyer plusieurs séances ensemble'),
trailing: const Icon(Icons.chevron_right),
onTap: onSharePack,
),
),
trailing: const Icon(Icons.chevron_right),
onTap: onShares,
),
const Divider(height: 1),
Material(
type: MaterialType.transparency,
child: ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.inbox_outlined),
title: const Text('Partages reçus'),
subtitle: const Text(
"Programmes, séances et packs reçus d'autres comptes",
),
trailing: const Icon(Icons.chevron_right),
onTap: onShares,
),
),
],
),
),
],