diff --git a/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart b/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart index 7059c2f..5855e69 100644 --- a/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart +++ b/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart @@ -69,29 +69,6 @@ class _AdminAmEditModalState extends State static const double _proTabHeight = 300; static const List _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,17 +518,15 @@ class _AdminAmEditModalState extends State Widget _identityTab() { - return SingleChildScrollView( - child: IdentityBlock.editable( - title: 'Identité et coordonnées', - nomController: _nomCtrl, - prenomController: _prenomCtrl, - telephoneController: _telCtrl, - emailController: _emailCtrl, - adresseController: _adresseCtrl, - codePostalController: _cpCtrl, - villeController: _villeCtrl, - ), + return IdentityBlock.editable( + title: 'Identité et coordonnées', + nomController: _nomCtrl, + prenomController: _prenomCtrl, + telephoneController: _telCtrl, + emailController: _emailCtrl, + adresseController: _adresseCtrl, + codePostalController: _cpCtrl, + villeController: _villeCtrl, ); } @@ -610,7 +585,9 @@ class _AdminAmEditModalState extends State return LayoutBuilder( builder: (context, c) { final maxRowW = c.maxWidth; - final maxRowH = c.maxHeight; + // Hauteur bornée : l’onglet 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 ); } + /// Corps de l’onglet 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 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(_tabCtrl.index), + child: _buildActiveTabBody(), ), ), ),