fix(am): hauteur modale fiche AM par onglet (sans scroll inutile).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-10 22:16:06 +02:00
co-authored by Cursor
parent e235b30140
commit 97afbbcf9a
@@ -69,29 +69,6 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
static const double _proTabHeight = 300;
static const List<int> _photoProRowLayout = [2, 2, 2];
/// Hauteur onglet enfants : champs + titre + grille 2×2 (+ alerte places si besoin).
double _childrenTabHeight() {
const capacityFields = 72.0;
const titleSection = 40.0;
const inconsistencyExtra = 46.0;
var h = capacityFields +
titleSection +
AdminAmChildrenCapacityGrid.fixedHeight;
if (_placesInconsistent()) h += inconsistencyExtra;
return h + 4;
}
double _tabViewHeight(int index) {
switch (index) {
case 1:
return _proTabHeight;
case 2:
return _childrenTabHeight();
default:
return 292;
}
}
@override
void initState() {
super.initState();
@@ -541,8 +518,7 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
Widget _identityTab() {
return SingleChildScrollView(
child: IdentityBlock.editable(
return IdentityBlock.editable(
title: 'Identité et coordonnées',
nomController: _nomCtrl,
prenomController: _prenomCtrl,
@@ -551,7 +527,6 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
adresseController: _adresseCtrl,
codePostalController: _cpCtrl,
villeController: _villeCtrl,
),
);
}
@@ -610,7 +585,9 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
return LayoutBuilder(
builder: (context, c) {
final maxRowW = c.maxWidth;
final maxRowH = c.maxHeight;
// Hauteur bornée : longlet pro a une hauteur fixe (photo ID).
final maxRowH =
c.maxHeight.isFinite ? c.maxHeight : _proTabHeight;
final bodyH = maxRowH;
final idealPhotoW = bodyH * AdminAmPhotoFrame.idPhotoAspectRatio + 16;
final maxPhotoW = (maxRowW - _photoProGap - _proColumnMinWidth)
@@ -659,6 +636,18 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
);
}
/// Corps de longlet actif — hauteur naturelle (pas de TabBarView).
Widget _buildActiveTabBody() {
switch (_tabCtrl.index) {
case 1:
return SizedBox(height: _proTabHeight, child: _proTab());
case 2:
return _childrenTab();
default:
return _identityTab();
}
}
Widget _childrenCapacityFields() {
final inconsistent = _placesInconsistent();
return Column(
@@ -867,15 +856,13 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
const Divider(height: 1),
Padding(
padding: const EdgeInsets.fromLTRB(20, 12, 20, 0),
child: SizedBox(
height: _tabViewHeight(_tabCtrl.index),
child: TabBarView(
controller: _tabCtrl,
children: [
_identityTab(),
_proTab(),
_childrenTab(),
],
child: AnimatedSize(
duration: const Duration(milliseconds: 180),
curve: Curves.easeInOut,
alignment: Alignment.topCenter,
child: KeyedSubtree(
key: ValueKey<int>(_tabCtrl.index),
child: _buildActiveTabBody(),
),
),
),