feat: Mise à jour des interfaces mobiles v3.2.3

- Amélioration des interfaces utilisateur sur mobile
- Optimisation de la responsivité des composants Flutter
- Mise à jour des widgets de chat et communication
- Amélioration des formulaires et tableaux
- Ajout de nouveaux composants pour l'administration
- Optimisation des thèmes et styles visuels

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-02 20:35:40 +02:00
parent 4153f73ace
commit f7baa7492c
106 changed files with 88501 additions and 88280 deletions

View File

@@ -146,7 +146,7 @@ class CombinedChart extends StatelessWidget {
child: Text(
formattedDate,
style: TextStyle(
color: theme.colorScheme.onSurface.withOpacity(0.6),
color: theme.colorScheme.onSurface.withValues(alpha: 0.6),
fontSize: 10,
),
),
@@ -166,7 +166,7 @@ class CombinedChart extends StatelessWidget {
child: Text(
value.toInt().toString(),
style: TextStyle(
color: theme.colorScheme.onSurface.withOpacity(0.6),
color: theme.colorScheme.onSurface.withValues(alpha: 0.6),
fontSize: 10,
),
),
@@ -189,7 +189,7 @@ class CombinedChart extends StatelessWidget {
child: Text(
'${amountValue.toInt()}',
style: TextStyle(
color: theme.colorScheme.onSurface.withOpacity(0.6),
color: theme.colorScheme.onSurface.withValues(alpha: 0.6),
fontSize: 10,
),
),
@@ -206,7 +206,7 @@ class CombinedChart extends StatelessWidget {
show: true,
getDrawingHorizontalLine: (value) {
return FlLine(
color: theme.dividerColor.withOpacity(0.2),
color: theme.dividerColor.withValues(alpha: 0.2),
strokeWidth: 1,
);
},
@@ -220,7 +220,7 @@ class CombinedChart extends StatelessWidget {
extraLinesOnTop: true,
),
),
swapAnimationDuration: const Duration(milliseconds: 250),
duration: const Duration(milliseconds: 250),
),
);
}

View File

@@ -90,7 +90,7 @@ class PassageSummaryCard extends StatelessWidget {
backgroundIcon,
size: backgroundIconSize,
color: (backgroundIconColor ?? AppTheme.primaryColor)
.withOpacity(backgroundIconOpacity),
.withValues(alpha: backgroundIconOpacity),
),
),
),
@@ -104,7 +104,7 @@ class PassageSummaryCard extends StatelessWidget {
// Titre avec comptage
useValueListenable
? _buildTitleWithValueListenable()
: _buildTitleWithStaticData(),
: _buildTitleWithStaticData(context),
const Divider(height: 24),
// Contenu principal
Expanded(
@@ -117,7 +117,7 @@ class PassageSummaryCard extends StatelessWidget {
flex: isDesktop ? 1 : 2,
child: useValueListenable
? _buildPassagesListWithValueListenable()
: _buildPassagesListWithStaticData(),
: _buildPassagesListWithStaticData(context),
),
// Séparateur vertical
@@ -176,8 +176,8 @@ class PassageSummaryCard extends StatelessWidget {
Expanded(
child: Text(
title,
style: const TextStyle(
fontSize: 16,
style: TextStyle(
fontSize: AppTheme.r(context, 16),
fontWeight: FontWeight.bold,
),
),
@@ -186,7 +186,7 @@ class PassageSummaryCard extends StatelessWidget {
customTotalDisplay?.call(totalUserPassages) ??
totalUserPassages.toString(),
style: TextStyle(
fontSize: 20,
fontSize: AppTheme.r(context, 20),
fontWeight: FontWeight.bold,
color: titleColor,
),
@@ -198,7 +198,7 @@ class PassageSummaryCard extends StatelessWidget {
}
/// Construction du titre avec données statiques
Widget _buildTitleWithStaticData() {
Widget _buildTitleWithStaticData(BuildContext context) {
final totalPassages =
passagesByType?.values.fold(0, (sum, count) => sum + count) ?? 0;
@@ -215,8 +215,8 @@ class PassageSummaryCard extends StatelessWidget {
Expanded(
child: Text(
title,
style: const TextStyle(
fontSize: 16,
style: TextStyle(
fontSize: AppTheme.r(context, 16),
fontWeight: FontWeight.bold,
),
),
@@ -224,7 +224,7 @@ class PassageSummaryCard extends StatelessWidget {
Text(
customTotalDisplay?.call(totalPassages) ?? totalPassages.toString(),
style: TextStyle(
fontSize: 20,
fontSize: AppTheme.r(context, 20),
fontWeight: FontWeight.bold,
color: titleColor,
),
@@ -241,18 +241,18 @@ class PassageSummaryCard extends StatelessWidget {
builder: (context, Box<PassageModel> passagesBox, child) {
final passagesCounts = _calculatePassagesCounts(passagesBox);
return _buildPassagesList(passagesCounts);
return _buildPassagesList(context, passagesCounts);
},
);
}
/// Construction de la liste des passages avec données statiques
Widget _buildPassagesListWithStaticData() {
return _buildPassagesList(passagesByType ?? {});
Widget _buildPassagesListWithStaticData(BuildContext context) {
return _buildPassagesList(context, passagesByType ?? {});
}
/// Construction de la liste des passages
Widget _buildPassagesList(Map<int, int> passagesCounts) {
Widget _buildPassagesList(BuildContext context, Map<int, int> passagesCounts) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -284,13 +284,13 @@ class PassageSummaryCard extends StatelessWidget {
Expanded(
child: Text(
typeData['titres'] as String,
style: const TextStyle(fontSize: 14),
style: TextStyle(fontSize: AppTheme.r(context, 14)),
),
),
Text(
count.toString(),
style: TextStyle(
fontSize: 16,
fontSize: AppTheme.r(context, 16),
fontWeight: FontWeight.bold,
color: color,
),

View File

@@ -87,7 +87,7 @@ class PaymentSummaryCard extends StatelessWidget {
backgroundIcon,
size: backgroundIconSize,
color: (backgroundIconColor ?? Colors.blue)
.withOpacity(backgroundIconOpacity),
.withValues(alpha: backgroundIconOpacity),
),
),
),
@@ -101,7 +101,7 @@ class PaymentSummaryCard extends StatelessWidget {
// Titre avec comptage
useValueListenable
? _buildTitleWithValueListenable()
: _buildTitleWithStaticData(),
: _buildTitleWithStaticData(context),
const Divider(height: 24),
// Contenu principal
Expanded(
@@ -114,7 +114,7 @@ class PaymentSummaryCard extends StatelessWidget {
flex: isDesktop ? 1 : 2,
child: useValueListenable
? _buildPaymentsListWithValueListenable()
: _buildPaymentsListWithStaticData(),
: _buildPaymentsListWithStaticData(context),
),
// Séparateur vertical
@@ -179,8 +179,8 @@ class PaymentSummaryCard extends StatelessWidget {
Expanded(
child: Text(
title,
style: const TextStyle(
fontSize: 16,
style: TextStyle(
fontSize: AppTheme.r(context, 16),
fontWeight: FontWeight.bold,
),
),
@@ -189,7 +189,7 @@ class PaymentSummaryCard extends StatelessWidget {
customTotalDisplay?.call(paymentStats['totalAmount']) ??
'${paymentStats['totalAmount'].toStringAsFixed(2)}',
style: TextStyle(
fontSize: 20,
fontSize: AppTheme.r(context, 20),
fontWeight: FontWeight.bold,
color: titleColor,
),
@@ -201,7 +201,7 @@ class PaymentSummaryCard extends StatelessWidget {
}
/// Construction du titre avec données statiques
Widget _buildTitleWithStaticData() {
Widget _buildTitleWithStaticData(BuildContext context) {
final totalAmount =
paymentsByType?.values.fold(0.0, (sum, amount) => sum + amount) ?? 0.0;
@@ -218,8 +218,8 @@ class PaymentSummaryCard extends StatelessWidget {
Expanded(
child: Text(
title,
style: const TextStyle(
fontSize: 16,
style: TextStyle(
fontSize: AppTheme.r(context, 16),
fontWeight: FontWeight.bold,
),
),
@@ -228,7 +228,7 @@ class PaymentSummaryCard extends StatelessWidget {
customTotalDisplay?.call(totalAmount) ??
'${totalAmount.toStringAsFixed(2)}',
style: TextStyle(
fontSize: 20,
fontSize: AppTheme.r(context, 20),
fontWeight: FontWeight.bold,
color: titleColor,
),
@@ -245,18 +245,18 @@ class PaymentSummaryCard extends StatelessWidget {
builder: (context, Box<PassageModel> passagesBox, child) {
final paymentAmounts = _calculatePaymentAmounts(passagesBox);
return _buildPaymentsList(paymentAmounts);
return _buildPaymentsList(context, paymentAmounts);
},
);
}
/// Construction de la liste des règlements avec données statiques
Widget _buildPaymentsListWithStaticData() {
return _buildPaymentsList(paymentsByType ?? {});
Widget _buildPaymentsListWithStaticData(BuildContext context) {
return _buildPaymentsList(context, paymentsByType ?? {});
}
/// Construction de la liste des règlements
Widget _buildPaymentsList(Map<int, double> paymentAmounts) {
Widget _buildPaymentsList(BuildContext context, Map<int, double> paymentAmounts) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -288,13 +288,13 @@ class PaymentSummaryCard extends StatelessWidget {
Expanded(
child: Text(
typeData['titre'] as String,
style: const TextStyle(fontSize: 14),
style: TextStyle(fontSize: AppTheme.r(context, 14)),
),
),
Text(
'${amount.toStringAsFixed(2)}',
style: TextStyle(
fontSize: 16,
fontSize: AppTheme.r(context, 16),
fontWeight: FontWeight.bold,
color: color,
),