Clean project: remove test files, debug logs, and add documentation

This commit is contained in:
dahoud
2025-10-05 13:41:33 +00:00
parent 96a17eadbd
commit 291847924c
438 changed files with 65754 additions and 32713 deletions

View File

@@ -0,0 +1,125 @@
import 'package:flutter/material.dart';
import '../design_tokens.dart';
/// Header harmonisé UnionFlow
///
/// Composant header standardisé pour toutes les pages de l'application.
/// Garantit la cohérence visuelle et l'expérience utilisateur.
class UFHeader extends StatelessWidget {
final String title;
final String? subtitle;
final IconData icon;
final List<Widget>? actions;
final VoidCallback? onNotificationTap;
final VoidCallback? onSettingsTap;
final bool showActions;
const UFHeader({
super.key,
required this.title,
this.subtitle,
required this.icon,
this.actions,
this.onNotificationTap,
this.onSettingsTap,
this.showActions = true,
});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(UnionFlowDesignTokens.spaceMD),
decoration: BoxDecoration(
gradient: UnionFlowDesignTokens.primaryGradient,
borderRadius: BorderRadius.circular(UnionFlowDesignTokens.radiusLG),
boxShadow: UnionFlowDesignTokens.shadowXL,
),
child: Row(
children: [
// Icône et contenu principal
Container(
padding: const EdgeInsets.all(UnionFlowDesignTokens.spaceSM),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.2),
borderRadius: BorderRadius.circular(UnionFlowDesignTokens.radiusBase),
),
child: Icon(
icon,
color: UnionFlowDesignTokens.textOnPrimary,
size: 24,
),
),
const SizedBox(width: UnionFlowDesignTokens.spaceMD),
// Titre et sous-titre
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: UnionFlowDesignTokens.headingMD.copyWith(
color: UnionFlowDesignTokens.textOnPrimary,
),
),
if (subtitle != null) ...[
const SizedBox(height: UnionFlowDesignTokens.spaceXS),
Text(
subtitle!,
style: UnionFlowDesignTokens.bodySM.copyWith(
color: UnionFlowDesignTokens.textOnPrimary.withOpacity(0.8),
),
),
],
],
),
),
// Actions
if (showActions) _buildActions(),
],
),
);
}
Widget _buildActions() {
if (actions != null) {
return Row(children: actions!);
}
return Row(
children: [
if (onNotificationTap != null)
Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.2),
borderRadius: BorderRadius.circular(UnionFlowDesignTokens.radiusSM),
),
child: IconButton(
onPressed: onNotificationTap,
icon: const Icon(
Icons.notifications_outlined,
color: UnionFlowDesignTokens.textOnPrimary,
),
),
),
if (onNotificationTap != null && onSettingsTap != null)
const SizedBox(width: UnionFlowDesignTokens.spaceSM),
if (onSettingsTap != null)
Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.2),
borderRadius: BorderRadius.circular(UnionFlowDesignTokens.radiusSM),
),
child: IconButton(
onPressed: onSettingsTap,
icon: const Icon(
Icons.settings_outlined,
color: UnionFlowDesignTokens.textOnPrimary,
),
),
),
],
);
}
}