feat(shared): legacy presentation/ + shared design system + widgets

- lib/presentation : pages legacy (explore/network, notifications) avec BLoC
- lib/shared/design_system : UnionFlow Design System v2 (tokens, components)
  + MD3 tokens + module_colors par feature
- lib/shared/widgets : widgets transversaux (core_card, core_shimmer,
  error_widget, loading_widget, powered_by_lions_dev, etc.)
- lib/shared/constants + utils
This commit is contained in:
dahoud
2026-04-15 20:27:23 +00:00
parent 744faa3a9c
commit 7cd7c6fc9e
36 changed files with 1890 additions and 837 deletions

View File

@@ -76,7 +76,7 @@ class _FinanceView extends StatelessWidget {
alignment: CrossAxisAlignment.center,
),
),
const VerticalDivider(color: AppColors.lightBorder),
const VerticalDivider(color: AppColors.border),
Expanded(
child: MiniMetricWidget(
label: 'En attente',
@@ -85,7 +85,7 @@ class _FinanceView extends StatelessWidget {
alignment: CrossAxisAlignment.center,
),
),
const VerticalDivider(color: AppColors.lightBorder),
const VerticalDivider(color: AppColors.border),
Expanded(
child: MiniMetricWidget(
label: 'Épargne',
@@ -106,7 +106,7 @@ class _FinanceView extends StatelessWidget {
style: AppTypography.badgeText.copyWith(
color: Theme.of(context).brightness == Brightness.dark
? AppColors.textSecondaryDark
: AppColors.textSecondaryLight,
: AppColors.textSecondary,
),
),
),

View File

@@ -63,7 +63,7 @@ class _NetworkViewState extends State<_NetworkView> {
color: Theme.of(context).scaffoldBackgroundColor,
border: Border(
bottom: BorderSide(
color: isDark ? AppColors.darkBorder : AppColors.lightBorder,
color: isDark ? AppColors.borderDark : AppColors.border,
width: 1,
),
),
@@ -75,9 +75,9 @@ class _NetworkViewState extends State<_NetworkView> {
decoration: InputDecoration(
hintText: 'Rechercher des membres, organisations...',
hintStyle: AppTypography.subtitleSmall,
prefixIcon: const Icon(Icons.search, size: 20, color: AppColors.textSecondaryLight),
prefixIcon: const Icon(Icons.search, size: 20, color: AppColors.textSecondary),
filled: true,
fillColor: isDark ? AppColors.darkSurface : AppColors.lightSurface,
fillColor: isDark ? AppColors.surfaceDark : AppColors.surface,
contentPadding: const EdgeInsets.symmetric(vertical: 0), // Garder petit
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),
@@ -160,8 +160,8 @@ class _NetworkViewState extends State<_NetworkView> {
},
child: InfoBadge(
text: item.isConnected ? 'Connecté' : 'Suivre',
backgroundColor: item.isConnected ? AppColors.lightSurface : AppColors.primaryGreen,
textColor: item.isConnected ? AppColors.textPrimaryLight : Colors.white,
backgroundColor: item.isConnected ? AppColors.surface : AppColors.primary,
textColor: item.isConnected ? AppColors.textPrimary : Colors.white,
),
),
],

View File

@@ -96,7 +96,7 @@ class _UnifiedFeedViewState extends State<_UnifiedFeedView> {
),
),
body: RefreshIndicator(
color: AppColors.primaryGreen,
color: AppColors.primary,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
onRefresh: () async {
context.read<UnifiedFeedBloc>().add(const LoadFeedRequested(isRefresh: true));
@@ -189,8 +189,8 @@ class _UnifiedFeedViewState extends State<_UnifiedFeedView> {
const SizedBox(width: 6),
InfoBadge(
text: item.type.name.toUpperCase(),
backgroundColor: AppColors.primaryGreen.withOpacity(0.1),
textColor: AppColors.primaryGreen,
backgroundColor: AppColors.primary.withOpacity(0.1),
textColor: AppColors.primary,
),
]
],
@@ -206,7 +206,7 @@ class _UnifiedFeedViewState extends State<_UnifiedFeedView> {
size: 16,
color: Theme.of(context).brightness == Brightness.dark
? AppColors.textSecondaryDark
: AppColors.textSecondaryLight,
: AppColors.textSecondary,
),
onPressed: () => _showPostOptionsMenu(context, item),
)

View File

@@ -116,7 +116,7 @@ class _NotificationView extends StatelessWidget {
itemCount: state.items.length,
itemBuilder: (context, index) {
final item = state.items[index];
final unreadColor = isDark ? const Color(0xFF1B2E26) : const Color(0xFFE8F5E9);
final unreadColor = isDark ? const Color(0xFF1A1F2E) : const Color(0xFFEFF6FF);
return InkWell(
onTap: () {
@@ -136,8 +136,8 @@ class _NotificationView extends StatelessWidget {
Icon(
item.category == 'finance' ? Icons.payment : Icons.event,
color: item.isRead
? (isDark ? AppColors.textSecondaryDark : AppColors.textSecondaryLight)
: AppColors.primaryGreen,
? (isDark ? AppColors.textSecondaryDark : AppColors.textSecondary)
: AppColors.primary,
size: 20,
),
const SizedBox(width: 12),

View File

@@ -48,7 +48,7 @@ class MiniHeaderBar extends StatelessWidget implements PreferredSizeWidget {
Text(
title,
style: AppTypography.headerSmall.copyWith(
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight,
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimary,
),
),

View File

@@ -29,7 +29,7 @@ class MiniMetricWidget extends StatelessWidget {
style: AppTypography.badgeText.copyWith(
color: Theme.of(context).brightness == Brightness.dark
? AppColors.textSecondaryDark
: AppColors.textSecondaryLight,
: AppColors.textSecondary,
),
),
const SizedBox(height: 2),
@@ -38,7 +38,7 @@ class MiniMetricWidget extends StatelessWidget {
style: AppTypography.actionText.copyWith(
color: valueColor ?? (Theme.of(context).brightness == Brightness.dark
? AppColors.textPrimaryDark
: AppColors.textPrimaryLight),
: AppColors.textPrimary),
),
),
],

View File

@@ -42,7 +42,7 @@ class ProfileDrawer extends StatelessWidget {
Text(
name,
style: AppTypography.headerSmall.copyWith(
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight,
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimary,
),
),
const SizedBox(height: 4),
@@ -68,7 +68,7 @@ class ProfileDrawer extends StatelessWidget {
},
),
Divider(color: isDark ? AppColors.darkBorder : AppColors.lightBorder, height: 1),
Divider(color: isDark ? AppColors.borderDark : AppColors.border, height: 1),
// Liens / Actions (factorisés)
Expanded(
@@ -84,7 +84,7 @@ class ProfileDrawer extends StatelessWidget {
),
),
Divider(color: isDark ? AppColors.darkBorder : AppColors.lightBorder, height: 1),
Divider(color: isDark ? AppColors.borderDark : AppColors.border, height: 1),
// Bouton Déconnexion
Padding(
@@ -124,14 +124,14 @@ class ProfileDrawer extends StatelessWidget {
Icon(
icon,
size: 22,
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight,
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimary,
),
const SizedBox(width: 20),
Text(
title,
style: AppTypography.headerSmall.copyWith(
fontWeight: FontWeight.w500,
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight,
color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimary,
),
),
],