feat(features): refontes onboarding/organizations/profile/reports/settings/solidarity

- onboarding : datasource souscription, models formule/status, bloc complet
- organizations : bloc orgs + switcher + types bloc, models, pages edit/create
- profile : bloc complet avec change password, delete account, preferences
- reports : bloc avec DashboardReports + ScheduleReports + GenerateReport
- settings : language, privacy, feedback pages
- solidarity : bloc complet demandes d'aide (CRUD, approuver, rejeter)
This commit is contained in:
dahoud
2026-04-15 20:27:12 +00:00
parent dbf6a972ba
commit 744faa3a9c
17 changed files with 711 additions and 403 deletions

View File

@@ -54,24 +54,27 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: Column(
children: [
_buildHeader(),
Expanded(
child: SingleChildScrollView(
padding: const EdgeInsets.all(12),
child: Column(
children: [
const SizedBox(height: 8),
_buildLanguageList(),
const SizedBox(height: 8),
_buildInfoSection(),
const SizedBox(height: 80),
],
body: SafeArea(
top: false,
child: Column(
children: [
_buildHeader(),
Expanded(
child: SingleChildScrollView(
padding: const EdgeInsets.all(12),
child: Column(
children: [
const SizedBox(height: 8),
_buildLanguageList(),
const SizedBox(height: 8),
_buildInfoSection(),
const SizedBox(height: 80),
],
),
),
),
),
],
],
),
),
);
}
@@ -81,15 +84,15 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
margin: const EdgeInsets.all(SpacingTokens.lg),
padding: const EdgeInsets.all(SpacingTokens.xxl),
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [AppColors.brandGreen, AppColors.primaryGreen],
gradient: LinearGradient(
colors: ModuleColors.parametresGradient,
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
borderRadius: BorderRadius.circular(SpacingTokens.xl),
boxShadow: [
BoxShadow(
color: AppColors.primaryGreen.withOpacity(0.3),
color: ModuleColors.parametres.withOpacity(0.3),
blurRadius: 20,
offset: const Offset(0, 8),
),
@@ -142,12 +145,12 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
Widget _buildLanguageList() {
final isDark = Theme.of(context).brightness == Brightness.dark;
final textPrimary = isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight;
final textSecondary = isDark ? AppColors.textSecondaryDark : AppColors.textSecondaryLight;
final textPrimary = isDark ? AppColors.textPrimaryDark : AppColors.textPrimary;
final textSecondary = isDark ? AppColors.textSecondaryDark : AppColors.textSecondary;
return Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: isDark ? AppColors.darkSurface : Colors.white,
color: isDark ? AppColors.surfaceDark : Colors.white,
borderRadius: BorderRadius.circular(10),
),
child: Column(
@@ -173,8 +176,8 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
Widget _buildLanguageTile(_LanguageOption lang) {
final isDark = Theme.of(context).brightness == Brightness.dark;
final isSelected = _selectedLanguage == lang.name;
final textPrimary = isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight;
final textSecondary = isDark ? AppColors.textSecondaryDark : AppColors.textSecondaryLight;
final textPrimary = isDark ? AppColors.textPrimaryDark : AppColors.textPrimary;
final textSecondary = isDark ? AppColors.textSecondaryDark : AppColors.textSecondary;
return Padding(
padding: const EdgeInsets.only(bottom: 6),
child: InkWell(
@@ -184,12 +187,12 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 7),
decoration: BoxDecoration(
color: isSelected
? AppColors.primaryGreen.withOpacity(0.08)
: (isDark ? AppColors.darkBackground : Colors.grey[50]),
? AppColors.primary.withOpacity(0.08)
: (isDark ? AppColors.backgroundSubtleDark : AppColors.backgroundSubtle),
borderRadius: BorderRadius.circular(8),
border: isSelected
? Border.all(color: AppColors.primaryGreen.withOpacity(0.4), width: 1.5)
: Border.all(color: isDark ? AppColors.darkBorder : Colors.grey[200]!),
? Border.all(color: AppColors.primary.withOpacity(0.4), width: 1.5)
: Border.all(color: isDark ? AppColors.surfaceVariantDark : AppColors.surfaceVariant),
),
child: Row(
children: [
@@ -203,7 +206,7 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
lang.name,
style: AppTypography.bodyTextSmall.copyWith(
fontWeight: FontWeight.w600,
color: isSelected ? AppColors.primaryGreen : textPrimary,
color: isSelected ? AppColors.primary : textPrimary,
),
),
Text(
@@ -214,7 +217,7 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
),
),
if (isSelected)
const Icon(Icons.check_circle, color: AppColors.primaryGreen, size: 22),
const Icon(Icons.check_circle, color: AppColors.primary, size: 22),
],
),
),
@@ -224,12 +227,12 @@ class _LanguageSettingsPageState extends State<LanguageSettingsPage> {
Widget _buildInfoSection() {
final isDark = Theme.of(context).brightness == Brightness.dark;
final textPrimary = isDark ? AppColors.textPrimaryDark : AppColors.textPrimaryLight;
final textSecondary = isDark ? AppColors.textSecondaryDark : AppColors.textSecondaryLight;
final textPrimary = isDark ? AppColors.textPrimaryDark : AppColors.textPrimary;
final textSecondary = isDark ? AppColors.textSecondaryDark : AppColors.textSecondary;
return Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: isDark ? AppColors.darkSurface : Colors.white,
color: isDark ? AppColors.surfaceDark : Colors.white,
borderRadius: BorderRadius.circular(10),
),
child: Column(