From b558cc17f174705b5963193298db758bb7cbd4ec Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sat, 28 Dec 2024 21:55:36 +0600 Subject: [PATCH] fix: SafeArea for global bottom items not working --- lib/pages/root/root_app.dart | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/pages/root/root_app.dart b/lib/pages/root/root_app.dart index cdb56910..b8d4d166 100644 --- a/lib/pages/root/root_app.dart +++ b/lib/pages/root/root_app.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; @@ -179,16 +180,37 @@ class RootApp extends HookConsumerWidget { return getSidebarTileList(context.l10n).map((s) => s.name).toList(); }, []); + final bottomPlayerKey = useMemoized(() => GlobalKey(), []); + final navigationBarKey = useMemoized(() => GlobalKey(), []); + + final bottomPadding = useMemoized(() { + return [bottomPlayerKey, navigationBarKey] + .map((k) => + (k.currentContext?.findRenderObject() as RenderBox?) + ?.size + .height ?? + 0) + .sum; + }, [bottomPlayerKey, navigationBarKey]); + final scaffold = MediaQuery.removeViewInsets( context: context, removeBottom: true, child: Scaffold( - footers: const [ - BottomPlayer(), - SpotubeNavigationBar(), + footers: [ + BottomPlayer(key: bottomPlayerKey), + SpotubeNavigationBar(key: navigationBarKey), ], floatingFooter: true, - child: Sidebar(child: child), + // Fix for safe are not working for bottom bar + child: MediaQuery( + data: MediaQuery.of(context).copyWith( + padding: MediaQuery.of(context).padding.copyWith( + bottom: bottomPadding, + ), + ), + child: Sidebar(child: child), + ), ), );