From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 65FCD1FF0AF for ; Fri, 23 Oct 2026 13:40:57 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 336BB216AB; Fri, 23 Oct 2026 13:40:51 +0200 (CEST) From: Shan Shaji To: pve-devel@lists.proxmox.com Subject: [PATCH pve_flutter_frontend 1/3] fix: ui being inconsistent in overview pages Date: Fri, 23 Oct 2026 13:40:34 +0200 Message-ID: <20261023114036.70719-2-s.shaji@proxmox.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20261023114036.70719-1-s.shaji@proxmox.com> References: <20261023114036.70719-1-s.shaji@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1792755644176 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.378 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: 5JRDIRMDNNWFRKUKTDC5JD443N5JGOSL X-Message-ID-Hash: 5JRDIRMDNNWFRKUKTDC5JD443N5JGOSL X-MailFrom: s.shaji@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: For the new Apple's duo device, in the folded state the camera and the application dock are on the right side of the device. However, this depends on the orientation, so they are not always on the right. Since these are system intrusions and we are using SafeArea to avoid them, wrapping the overview page in SafeArea is causing clipping in the UI. In order to avoid this, remove the SafeArea widget. It is safe to remove SafeArea because the top AppBar avoids intrusions by default. For the left and right sides, individual padding is given to each widget. As for the bottom, a placeholder widget with a height of viewPadding.bottom [1] has been added. - [1] https://api.flutter.dev/flutter/dart-ui/FlutterView-class.html Signed-off-by: Shan Shaji --- lib/widgets/pve_lxc_overview.dart | 8 +++----- lib/widgets/pve_node_overview.dart | 6 ++---- lib/widgets/pve_qemu_overview.dart | 6 ++---- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/lib/widgets/pve_lxc_overview.dart b/lib/widgets/pve_lxc_overview.dart index 7caa5cf..b0b210a 100644 --- a/lib/widgets/pve_lxc_overview.dart +++ b/lib/widgets/pve_lxc_overview.dart @@ -65,9 +65,7 @@ class PveLxcOverview extends StatelessWidget { title: Text(config?.hostname ?? 'CT $guestID'), ), backgroundColor: Theme.of(context).colorScheme.surfaceContainer, - body: SafeArea( - bottom: !Platform.isIOS, - child: SingleChildScrollView( + body: SingleChildScrollView( child: Column( children: [ PveGuestOverviewHeader( @@ -247,11 +245,11 @@ class PveLxcOverview extends StatelessWidget { subtitle: const Text('DNS Server'), ), ]), - ] + ], + SizedBox(height: MediaQuery.of(context).viewPadding.bottom) ], ), ), - ), ); }), ); diff --git a/lib/widgets/pve_node_overview.dart b/lib/widgets/pve_node_overview.dart index 092bb54..4ecdede 100644 --- a/lib/widgets/pve_node_overview.dart +++ b/lib/widgets/pve_node_overview.dart @@ -62,9 +62,7 @@ class PveNodeOverview extends StatelessWidget { ), ), backgroundColor: Theme.of(context).colorScheme.surfaceContainer, - body: SafeArea( - bottom: !Platform.isIOS, - child: SingleChildScrollView( + body: SingleChildScrollView( child: Column( children: [ if (rrd.isNotEmpty) @@ -446,10 +444,10 @@ class PveNodeOverview extends StatelessWidget { .data! .compareTo((b.title as Text).data!)), ), + SizedBox(height: MediaQuery.of(context).viewPadding.bottom) ], ), ), - ), ); }, ); diff --git a/lib/widgets/pve_qemu_overview.dart b/lib/widgets/pve_qemu_overview.dart index 12e3b30..2f366a8 100644 --- a/lib/widgets/pve_qemu_overview.dart +++ b/lib/widgets/pve_qemu_overview.dart @@ -66,9 +66,7 @@ class PveQemuOverview extends StatelessWidget { title: Text(config?.name ?? 'VM $guestID'), ), backgroundColor: Theme.of(context).colorScheme.surfaceContainer, - body: SafeArea( - bottom: !Platform.isIOS, - child: SingleChildScrollView( + body: SingleChildScrollView( child: Column( children: [ PveGuestOverviewHeader( @@ -236,9 +234,9 @@ class PveQemuOverview extends StatelessWidget { title: Text(net), ) ]), + SizedBox(height: MediaQuery.of(context).viewPadding.bottom) ], )), - ), ); }), ); -- 2.50.1