From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 7886295303 for ; Fri, 12 Apr 2024 10:05:33 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 5BE8855AC for ; Fri, 12 Apr 2024 10:05:03 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Fri, 12 Apr 2024 10:05:00 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 00D9144FDA for ; Fri, 12 Apr 2024 10:05:00 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Date: Fri, 12 Apr 2024 10:04:50 +0200 Message-Id: <20240412080458.1066580-2-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240412080458.1066580-1-d.csapak@proxmox.com> References: <20240412080458.1066580-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.014 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH pve-flutter-frontend 1/9] replace BottomNavigationBar with NavigationBar X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Apr 2024 08:05:33 -0000 it has proper material 3 styling. For the animations to work correctly, we have to put the bar outside of the part that we replace when we navigate though Signed-off-by: Dominik Csapak --- lib/pages/main_layout_slim.dart | 57 +++++++++++++++++---------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/lib/pages/main_layout_slim.dart b/lib/pages/main_layout_slim.dart index 3da9beb..2a5e646 100644 --- a/lib/pages/main_layout_slim.dart +++ b/lib/pages/main_layout_slim.dart @@ -80,21 +80,12 @@ class _MainLayoutSlimState extends State { stream: pageSelector.stream, initialData: pageSelector.value, builder: (context, snapshot) { - if (snapshot.hasData) { - switch (snapshot.data) { - case 0: - return const MobileDashboard(); - case 1: - return const MobileResourceOverview(); - case 2: - Provider.of(context) - .events - .add(LoadUsers()); - return const MobileAccessManagement(); - default: - } - } - return Container(); + return Scaffold( + body: getMainContent(snapshot, context), + // it cannot be const, but depends only on context + // ignore: prefer_const_constructors + bottomNavigationBar: PveMobileBottomNavigationbar(), + ); }, ), ), @@ -108,6 +99,22 @@ class _MainLayoutSlimState extends State { } } +Widget getMainContent(snapshot, context) { + if (snapshot.hasData) { + switch (snapshot.data) { + case 0: + return const MobileDashboard(); + case 1: + return const MobileResourceOverview(); + case 2: + Provider.of(context).events.add(LoadUsers()); + return const MobileAccessManagement(); + default: + } + } + return Container(); +} + class PveMobileBottomNavigationbar extends StatelessWidget { const PveMobileBottomNavigationbar({super.key}); @@ -115,29 +122,28 @@ class PveMobileBottomNavigationbar extends StatelessWidget { Widget build(BuildContext context) { final pageSelector = Provider.of>(context); final light = Theme.of(context).colorScheme.brightness == Brightness.light; - return BottomNavigationBar( - type: BottomNavigationBarType.fixed, + return NavigationBar( backgroundColor: light ? Colors.white : ProxmoxColors.greyShade40, - items: const [ - BottomNavigationBarItem( + destinations: const [ + NavigationDestination( icon: Icon(Icons.dashboard), label: "Dashboard", ), - BottomNavigationBarItem( + NavigationDestination( icon: Icon(Icons.developer_board), label: "Resources", ), - BottomNavigationBarItem( + NavigationDestination( icon: Icon(Icons.supervised_user_circle), label: "Access", ), - BottomNavigationBarItem( + NavigationDestination( icon: Icon(Icons.logout), label: "Sites", ), ], - currentIndex: pageSelector.value, - onTap: (index) { + selectedIndex: pageSelector.value, + onDestinationSelected: (int index) { if (index == 3) { Provider.of(context, listen: false) .events @@ -543,7 +549,6 @@ class MobileDashboard extends StatelessWidget { ]); }), ]), - bottomNavigationBar: const PveMobileBottomNavigationbar(), ); } } @@ -656,7 +661,6 @@ class MobileResourceOverview extends StatelessWidget { } }, ), - bottomNavigationBar: const PveMobileBottomNavigationbar(), )), ); }, @@ -1237,7 +1241,6 @@ class MobileAccessManagement extends StatelessWidget { }), ]); }), - bottomNavigationBar: const PveMobileBottomNavigationbar(), ), ); } -- 2.39.2