From e3bbd7d99e87fd5d3223a940a5e64e6dbc277ad1 Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Fri, 8 May 2026 16:31:09 +0200 Subject: [PATCH] feat: replace ListView with SingleChildScrollView for better layout in admin panels --- .../presentation/admin_aliases_panel.dart | 17 +++--- .../admin_pending_products_panel.dart | 23 ++++---- .../presentation/admin_products_panel.dart | 6 +- .../admin/presentation/admin_users_panel.dart | 55 ++++++++++--------- 4 files changed, 55 insertions(+), 46 deletions(-) diff --git a/flutter/lib/features/admin/presentation/admin_aliases_panel.dart b/flutter/lib/features/admin/presentation/admin_aliases_panel.dart index d537d251..d52bdb70 100644 --- a/flutter/lib/features/admin/presentation/admin_aliases_panel.dart +++ b/flutter/lib/features/admin/presentation/admin_aliases_panel.dart @@ -296,13 +296,16 @@ class _AdminAliasesPanelState extends ConsumerState { if (filteredAliases.isEmpty) return content; - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - content, - const SizedBox(height: 8), - Expanded(child: buildAliasList()), - ], + return SingleChildScrollView( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + content, + const SizedBox(height: 8), + ...filteredAliases.map(buildAliasCard), + ], + ), ); } } diff --git a/flutter/lib/features/admin/presentation/admin_pending_products_panel.dart b/flutter/lib/features/admin/presentation/admin_pending_products_panel.dart index 4a5dc20e..2fe95861 100644 --- a/flutter/lib/features/admin/presentation/admin_pending_products_panel.dart +++ b/flutter/lib/features/admin/presentation/admin_pending_products_panel.dart @@ -140,16 +140,19 @@ class _AdminPendingProductsPanelState if (!widget.embedded) return content; - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - context.l10n.adminPendingDescription, - style: theme.textTheme.bodyMedium, - ), - const SizedBox(height: 12), - Expanded(child: content), - ], + return SingleChildScrollView( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + context.l10n.adminPendingDescription, + style: theme.textTheme.bodyMedium, + ), + const SizedBox(height: 12), + content, + ], + ), ); } } diff --git a/flutter/lib/features/admin/presentation/admin_products_panel.dart b/flutter/lib/features/admin/presentation/admin_products_panel.dart index e8acf608..92128088 100644 --- a/flutter/lib/features/admin/presentation/admin_products_panel.dart +++ b/flutter/lib/features/admin/presentation/admin_products_panel.dart @@ -738,9 +738,9 @@ class _AdminProductsPanelState extends ConsumerState { ); } - return ListView( - padding: EdgeInsets.zero, - children: [content], + return SingleChildScrollView( + padding: const EdgeInsets.all(12), + child: content, ); } } diff --git a/flutter/lib/features/admin/presentation/admin_users_panel.dart b/flutter/lib/features/admin/presentation/admin_users_panel.dart index b3f17041..b039e138 100644 --- a/flutter/lib/features/admin/presentation/admin_users_panel.dart +++ b/flutter/lib/features/admin/presentation/admin_users_panel.dart @@ -349,33 +349,36 @@ class _AdminUsersPanelState extends ConsumerState { return list; } - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: Text( - context.l10n.adminUsersDescription, - style: theme.textTheme.bodyMedium, + return SingleChildScrollView( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + context.l10n.adminUsersDescription, + style: theme.textTheme.bodyMedium, + ), ), - ), - IconButton( - icon: const Icon(Icons.refresh), - tooltip: 'Uppdatera', - onPressed: _load, - ), - ], - ), - const SizedBox(height: 8), - FilledButton.icon( - onPressed: _createUser, - icon: const Icon(Icons.person_add_outlined), - label: Text(context.l10n.adminNewUser), - ), - const SizedBox(height: 16), - Expanded(child: list), - ], + IconButton( + icon: const Icon(Icons.refresh), + tooltip: 'Uppdatera', + onPressed: _load, + ), + ], + ), + const SizedBox(height: 8), + FilledButton.icon( + onPressed: _createUser, + icon: const Icon(Icons.person_add_outlined), + label: Text(context.l10n.adminNewUser), + ), + const SizedBox(height: 16), + list, + ], + ), ); } }