feat(features): refontes adhesions/admin/auth/backup/contributions/dashboard/epargne/events

- adhesions : bloc complet avec events/states/model, dialogs paiement/rejet
- admin : users bloc, user management list/detail pages
- authentication : bloc + keycloak auth service + webview
- backup : bloc complet, repository, models
- contributions : bloc + widgets + export
- dashboard : widgets connectés (activities, events, notifications, search)
  + charts + monitoring + shortcuts
- epargne : repository, transactions, dialogs
- events : bloc complet, pages (detail, connected, wrapper), models
This commit is contained in:
dahoud
2026-04-15 20:26:48 +00:00
parent 45dcd2171e
commit 120434aba0
36 changed files with 903 additions and 1411 deletions

View File

@@ -17,8 +17,8 @@ class ActiveMemberDashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
appBar: _buildAppBar(),
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: _buildAppBar(context),
drawer: DashboardDrawer(
onLogout: () => context.read<AuthBloc>().add(const AuthLogoutRequested()),
),
@@ -229,10 +229,12 @@ class ActiveMemberDashboard extends StatelessWidget {
);
}
PreferredSizeWidget _buildAppBar() {
PreferredSizeWidget _buildAppBar(BuildContext context) {
return AppBar(
backgroundColor: UnionFlowColors.surface,
backgroundColor: Theme.of(context).colorScheme.surface,
elevation: 0,
scrolledUnderElevation: 1,
shadowColor: Theme.of(context).colorScheme.outline.withOpacity(0.2),
title: Row(
children: [
Container(
@@ -246,16 +248,16 @@ class ActiveMemberDashboard extends StatelessWidget {
child: const Text('U', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w900, fontSize: 18)),
),
const SizedBox(width: 12),
const Column(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: UnionFlowColors.textPrimary)),
Text('Membre Actif', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: UnionFlowColors.textSecondary)),
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface)),
Text('Membre Actif', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: Theme.of(context).colorScheme.onSurfaceVariant)),
],
),
],
),
iconTheme: const IconThemeData(color: UnionFlowColors.textPrimary),
iconTheme: IconThemeData(color: Theme.of(context).colorScheme.onSurface),
);
}

View File

@@ -17,7 +17,7 @@ class ConsultantDashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: _buildAppBar(context),
drawer: DashboardDrawer(
onLogout: () => context.read<AuthBloc>().add(const AuthLogoutRequested()),
@@ -205,8 +205,10 @@ class ConsultantDashboard extends StatelessWidget {
PreferredSizeWidget _buildAppBar(BuildContext context) {
return AppBar(
backgroundColor: UnionFlowColors.surface,
backgroundColor: Theme.of(context).colorScheme.surface,
elevation: 0,
scrolledUnderElevation: 1,
shadowColor: Theme.of(context).colorScheme.outline.withOpacity(0.2),
title: Row(
children: [
Container(
@@ -224,16 +226,16 @@ class ConsultantDashboard extends StatelessWidget {
child: const Text('C', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w900, fontSize: 18)),
),
const SizedBox(width: 12),
const Column(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: UnionFlowColors.textPrimary)),
Text('Consultant', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: UnionFlowColors.textSecondary)),
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface)),
Text('Consultant', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: Theme.of(context).colorScheme.onSurfaceVariant)),
],
),
],
),
iconTheme: const IconThemeData(color: UnionFlowColors.textPrimary),
iconTheme: IconThemeData(color: Theme.of(context).colorScheme.onSurface),
actions: [
UnionExportButton(
onExport: (_) => Navigator.of(context).push(

View File

@@ -17,7 +17,7 @@ class HRManagerDashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: _buildAppBar(context),
drawer: DashboardDrawer(
onLogout: () => context.read<AuthBloc>().add(const AuthLogoutRequested()),
@@ -250,8 +250,10 @@ class HRManagerDashboard extends StatelessWidget {
PreferredSizeWidget _buildAppBar(BuildContext context) {
return AppBar(
backgroundColor: UnionFlowColors.surface,
backgroundColor: Theme.of(context).colorScheme.surface,
elevation: 0,
scrolledUnderElevation: 1,
shadowColor: Theme.of(context).colorScheme.outline.withOpacity(0.2),
title: Row(
children: [
Container(
@@ -269,16 +271,16 @@ class HRManagerDashboard extends StatelessWidget {
child: const Text('H', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w900, fontSize: 18)),
),
const SizedBox(width: 12),
const Column(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: UnionFlowColors.textPrimary)),
Text('RH Manager', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: UnionFlowColors.textSecondary)),
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface)),
Text('RH Manager', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: Theme.of(context).colorScheme.onSurfaceVariant)),
],
),
],
),
iconTheme: const IconThemeData(color: UnionFlowColors.textPrimary),
iconTheme: IconThemeData(color: Theme.of(context).colorScheme.onSurface),
actions: [
UnionExportButton(
onExport: (_) => Navigator.of(context).push(

View File

@@ -20,8 +20,8 @@ class ModeratorDashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
appBar: _buildAppBar(),
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: _buildAppBar(context),
drawer: DashboardDrawer(
onLogout: () => context.read<AuthBloc>().add(const AuthLogoutRequested()),
),
@@ -359,10 +359,12 @@ class ModeratorDashboard extends StatelessWidget {
);
}
PreferredSizeWidget _buildAppBar() {
PreferredSizeWidget _buildAppBar(BuildContext context) {
return AppBar(
backgroundColor: UnionFlowColors.surface,
backgroundColor: Theme.of(context).colorScheme.surface,
elevation: 0,
scrolledUnderElevation: 1,
shadowColor: Theme.of(context).colorScheme.outline.withOpacity(0.2),
title: Row(
children: [
Container(
@@ -376,16 +378,16 @@ class ModeratorDashboard extends StatelessWidget {
child: const Text('U', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w900, fontSize: 18)),
),
const SizedBox(width: 12),
const Column(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: UnionFlowColors.textPrimary)),
Text('Modérateur', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: UnionFlowColors.textSecondary)),
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface)),
Text('Modérateur', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: Theme.of(context).colorScheme.onSurfaceVariant)),
],
),
],
),
iconTheme: const IconThemeData(color: UnionFlowColors.textPrimary),
iconTheme: IconThemeData(color: Theme.of(context).colorScheme.onSurface),
);
}

View File

@@ -24,7 +24,7 @@ class OrgAdminDashboardLoader extends StatelessWidget {
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: const Center(
child: CircularProgressIndicator(color: UnionFlowColors.gold),
),
@@ -32,7 +32,7 @@ class OrgAdminDashboardLoader extends StatelessWidget {
}
if (snapshot.hasError) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
@@ -69,7 +69,7 @@ class OrgAdminDashboardLoader extends StatelessWidget {
final orgsWithId = orgs.where((o) => o.id != null && o.id!.isNotEmpty).toList();
if (orgsWithId.isEmpty) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),

View File

@@ -16,8 +16,8 @@ class SimpleMemberDashboard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: UnionFlowColors.background,
appBar: _buildAppBar(),
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: _buildAppBar(context),
drawer: DashboardDrawer(
onLogout: () => context.read<AuthBloc>().add(const AuthLogoutRequested()),
),
@@ -189,10 +189,12 @@ class SimpleMemberDashboard extends StatelessWidget {
);
}
PreferredSizeWidget _buildAppBar() {
PreferredSizeWidget _buildAppBar(BuildContext context) {
return AppBar(
backgroundColor: UnionFlowColors.surface,
backgroundColor: Theme.of(context).colorScheme.surface,
elevation: 0,
scrolledUnderElevation: 1,
shadowColor: Theme.of(context).colorScheme.outline.withOpacity(0.2),
title: Row(
children: [
Container(
@@ -206,16 +208,16 @@ class SimpleMemberDashboard extends StatelessWidget {
child: const Text('U', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w900, fontSize: 18)),
),
const SizedBox(width: 12),
const Column(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: UnionFlowColors.textPrimary)),
Text('Membre Simple', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: UnionFlowColors.textSecondary)),
Text('UnionFlow', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w700, color: Theme.of(context).colorScheme.onSurface)),
Text('Membre Simple', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w400, color: Theme.of(context).colorScheme.onSurfaceVariant)),
],
),
],
),
iconTheme: const IconThemeData(color: UnionFlowColors.textPrimary),
iconTheme: IconThemeData(color: Theme.of(context).colorScheme.onSurface),
);
}