2 Commits

Author SHA1 Message Date
SaidSoighiri94 d02d47fb87 fix(responsable): show horizontal table scrollbars 2026-07-24 16:40:08 +02:00
SaidSoighiri94 c03df5e810 merge: responsable supervision tables 2026-07-24 16:13:27 +02:00
2 changed files with 227 additions and 188 deletions
@@ -2238,6 +2238,57 @@ class _PanelEmptyState extends StatelessWidget {
} }
} }
class _TableauAvecDefilementHorizontal extends StatefulWidget {
const _TableauAvecDefilementHorizontal({
required this.largeurMinimale,
required this.child,
});
final double largeurMinimale;
final Widget child;
@override
State<_TableauAvecDefilementHorizontal> createState() =>
_TableauAvecDefilementHorizontalState();
}
class _TableauAvecDefilementHorizontalState
extends State<_TableauAvecDefilementHorizontal> {
final ScrollController _controleur = ScrollController();
@override
void dispose() {
_controleur.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Scrollbar(
controller: _controleur,
thumbVisibility: true,
trackVisibility: true,
interactive: true,
thickness: 8,
radius: const Radius.circular(4),
scrollbarOrientation: ScrollbarOrientation.bottom,
notificationPredicate: (notification) =>
notification.metrics.axis == Axis.horizontal,
child: SingleChildScrollView(
controller: _controleur,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.only(bottom: 14),
child: ConstrainedBox(
constraints: BoxConstraints(minWidth: widget.largeurMinimale),
child: widget.child,
),
),
),
);
}
}
class _VueEmpruntsTableau extends StatelessWidget { class _VueEmpruntsTableau extends StatelessWidget {
const _VueEmpruntsTableau({ const _VueEmpruntsTableau({
required this.items, required this.items,
@@ -2556,11 +2607,8 @@ class _VueEmpruntsTableau extends StatelessWidget {
color: Colors.white, color: Colors.white,
border: Border.all(color: EnsupColors.line), border: Border.all(color: EnsupColors.line),
), ),
child: SingleChildScrollView( child: _TableauAvecDefilementHorizontal(
child: SingleChildScrollView( largeurMinimale: largeurDisponible,
scrollDirection: Axis.horizontal,
child: ConstrainedBox(
constraints: BoxConstraints(minWidth: largeurDisponible),
child: DataTable( child: DataTable(
sortColumnIndex: _sortColumnIndex, sortColumnIndex: _sortColumnIndex,
sortAscending: ordre == "asc", sortAscending: ordre == "asc",
@@ -2607,8 +2655,6 @@ class _VueEmpruntsTableau extends StatelessWidget {
), ),
), ),
), ),
),
),
); );
} }
@@ -3098,11 +3144,8 @@ class _VueMaterielsTableau extends StatelessWidget {
color: Colors.white, color: Colors.white,
border: Border.all(color: EnsupColors.line), border: Border.all(color: EnsupColors.line),
), ),
child: SingleChildScrollView( child: _TableauAvecDefilementHorizontal(
child: SingleChildScrollView( largeurMinimale: largeurDisponible,
scrollDirection: Axis.horizontal,
child: ConstrainedBox(
constraints: BoxConstraints(minWidth: largeurDisponible),
child: DataTable( child: DataTable(
sortColumnIndex: _sortColumnIndex, sortColumnIndex: _sortColumnIndex,
sortAscending: ordre == "asc", sortAscending: ordre == "asc",
@@ -3148,8 +3191,6 @@ class _VueMaterielsTableau extends StatelessWidget {
), ),
), ),
), ),
),
),
); );
} }
@@ -3626,11 +3667,8 @@ class _VueAnomaliesTableau extends StatelessWidget {
color: Colors.white, color: Colors.white,
border: Border.all(color: EnsupColors.line), border: Border.all(color: EnsupColors.line),
), ),
child: SingleChildScrollView( child: _TableauAvecDefilementHorizontal(
child: SingleChildScrollView( largeurMinimale: largeurDisponible,
scrollDirection: Axis.horizontal,
child: ConstrainedBox(
constraints: BoxConstraints(minWidth: largeurDisponible),
child: DataTable( child: DataTable(
sortColumnIndex: _sortColumnIndex, sortColumnIndex: _sortColumnIndex,
sortAscending: ordre == "asc", sortAscending: ordre == "asc",
@@ -3673,8 +3711,6 @@ class _VueAnomaliesTableau extends StatelessWidget {
), ),
), ),
), ),
),
),
); );
} }
@@ -4250,11 +4286,8 @@ class _VueHistoriqueTableau extends StatelessWidget {
color: Colors.white, color: Colors.white,
border: Border.all(color: EnsupColors.line), border: Border.all(color: EnsupColors.line),
), ),
child: SingleChildScrollView( child: _TableauAvecDefilementHorizontal(
child: SingleChildScrollView( largeurMinimale: largeurDisponible,
scrollDirection: Axis.horizontal,
child: ConstrainedBox(
constraints: BoxConstraints(minWidth: largeurDisponible),
child: DataTable( child: DataTable(
sortColumnIndex: _sortColumnIndex, sortColumnIndex: _sortColumnIndex,
sortAscending: ordre == "asc", sortAscending: ordre == "asc",
@@ -4297,8 +4330,6 @@ class _VueHistoriqueTableau extends StatelessWidget {
), ),
), ),
), ),
),
),
); );
} }
+9 -1
View File
@@ -525,6 +525,14 @@ En terminal interactif (VS Code), `migrate dev` fonctionne normalement (taper `y
- La confirmation reste enregistrée, le message de succès reste visible et les données de supervision sont rechargées normalement. - La confirmation reste enregistrée, le message de succès reste visible et les données de supervision sont rechargées normalement.
- Vérifications réussies : `dart analyze` sans erreur et serveur Flutter opérationnel sur le port 5000. - Vérifications réussies : `dart analyze` sans erreur et serveur Flutter opérationnel sur le port 5000.
### Étape 55 — Défilement horizontal visible des tableaux responsable
- Les tableaux Emprunts, Stock matériel, Anomalies et Historique restent accessibles sur les écrans de largeur intermédiaire.
- Un composant partagé gère le défilement horizontal avec son propre contrôleur Flutter.
- La barre horizontale est visible, interactive et positionnée sous le contenu de chaque tableau.
- Les dernières colonnes, notamment les statuts et les actions, peuvent être atteintes sans modifier la disposition sur grand écran.
- Les listes compactes mobiles existantes sont conservées sous leurs seuils responsifs.
- Vérifications réussies : les quatre tableaux utilisent le composant partagé, `dart analyze` est sans erreur et le serveur Flutter répond sur le port 5000.
--- ---
*Dernière mise à jour : 2026-07-24 — Rafraîchissement après décision responsable corrigé.* *Dernière mise à jour : 2026-07-24 — Défilement horizontal des tableaux responsable ajouté.*