fix(Desktop): Small improvement to padding and titlebar

This commit is contained in:
PartyDonut 2025-02-08 19:22:15 +01:00
parent 3b4b8a9101
commit 4371368fda
3 changed files with 125 additions and 109 deletions

View file

@ -106,7 +106,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
child: HomeBannerWidget(posters: homeCarouselItems), child: HomeBannerWidget(posters: homeCarouselItems),
), ),
), ),
} else if (AdaptiveLayout.of(context).isDesktop) },
const DefaultSliverTopBadding(), const DefaultSliverTopBadding(),
if (AdaptiveLayout.of(context).isDesktop) if (AdaptiveLayout.of(context).isDesktop)
const SliverToBoxAdapter( const SliverToBoxAdapter(

View file

@ -16,6 +16,8 @@ class DefaultTitleBar extends ConsumerStatefulWidget {
} }
class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowListener { class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowListener {
bool hovering = false;
@override @override
void initState() { void initState() {
windowManager.addListener(this); windowManager.addListener(this);
@ -40,7 +42,14 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
] ]
: <BoxShadow>[]; : <BoxShadow>[];
final iconColor = Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.65); final iconColor = Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.65);
return SizedBox( return MouseRegion(
onEnter: (event) => setState(() => hovering = true),
onExit: (event) => setState(() => hovering = false),
child: AnimatedContainer(
duration: const Duration(milliseconds: 250),
decoration: BoxDecoration(
color: hovering ? Colors.black.withValues(alpha: 0.15) : Colors.transparent,
),
height: widget.height, height: widget.height,
child: switch (AdaptiveLayout.of(context).platform) { child: switch (AdaptiveLayout.of(context).platform) {
TargetPlatform.android || TargetPlatform.iOS => SizedBox(height: MediaQuery.paddingOf(context).top), TargetPlatform.android || TargetPlatform.iOS => SizedBox(height: MediaQuery.paddingOf(context).top),
@ -71,10 +80,13 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
), ),
Row( Row(
children: [ children: [
FutureBuilder( FutureBuilder<List<bool>>(future: Future.microtask(() async {
future: windowManager.isMinimizable(), final isMinimized = await windowManager.isMinimized();
builder: (context, data) { final isFullScreen = await windowManager.isFullScreen();
final isMinimized = !(data.data ?? false); return [isMinimized, isFullScreen];
}), builder: (context, snapshot) {
final isMinimized = snapshot.data?.firstOrNull ?? false;
final fullScreen = snapshot.data?.lastOrNull ?? false;
return IconButton( return IconButton(
style: IconButton.styleFrom( style: IconButton.styleFrom(
hoverColor: brightness == Brightness.light hoverColor: brightness == Brightness.light
@ -82,6 +94,9 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
: Colors.white.withValues(alpha: 0.2), : Colors.white.withValues(alpha: 0.2),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(2))), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(2))),
onPressed: () async { onPressed: () async {
if (fullScreen) {
await windowManager.setFullScreen(false);
}
if (isMinimized) { if (isMinimized) {
windowManager.restore(); windowManager.restore();
} else { } else {
@ -169,6 +184,7 @@ class _DefaultTitleBarState extends ConsumerState<DefaultTitleBar> with WindowLi
TargetPlatform.macOS => const SizedBox.shrink(), TargetPlatform.macOS => const SizedBox.shrink(),
_ => Text(widget.label ?? "Fladder"), _ => Text(widget.label ?? "Fladder"),
}, },
),
); );
} }
} }

View file

@ -19,8 +19,8 @@ class DefaultSliverTopBadding extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return (AdaptiveLayout.viewSizeOf(context) != ViewSize.phone) return (AdaptiveLayout.viewSizeOf(context) == ViewSize.phone)
? const SliverPadding(padding: EdgeInsets.only(top: 35)) ? const SliverToBoxAdapter()
: SliverPadding(padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top)); : SliverPadding(padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top));
} }
} }