From 5a14f587a0cbecf5678c928c76d00f5d4a662a0d Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Fri, 10 Jan 2025 20:33:59 +0600 Subject: [PATCH] chore: titlebar buttons not working --- lib/components/titlebar/titlebar.dart | 2 + lib/components/titlebar/titlebar_buttons.dart | 17 +++++---- lib/components/titlebar/window_button.dart | 22 ++++------- lib/pages/home/home.dart | 2 +- lib/pages/library/library.dart | 37 +++++++++++-------- lib/pages/search/search.dart | 4 +- lib/pages/stats/stats.dart | 2 +- 7 files changed, 44 insertions(+), 42 deletions(-) diff --git a/lib/components/titlebar/titlebar.dart b/lib/components/titlebar/titlebar.dart index cba33ab4..215b63ed 100644 --- a/lib/components/titlebar/titlebar.dart +++ b/lib/components/titlebar/titlebar.dart @@ -7,6 +7,8 @@ import 'package:spotube/provider/user_preferences/user_preferences_provider.dart import 'package:spotube/utils/platform.dart'; import 'package:window_manager/window_manager.dart'; +final kTitlebarVisible = kIsWindows || kIsLinux; + class TitleBar extends HookConsumerWidget implements PreferredSizeWidget { final bool automaticallyImplyLeading; final List trailing; diff --git a/lib/components/titlebar/titlebar_buttons.dart b/lib/components/titlebar/titlebar_buttons.dart index 35cdf08e..42765d7b 100644 --- a/lib/components/titlebar/titlebar_buttons.dart +++ b/lib/components/titlebar/titlebar_buttons.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; +import 'package:spotube/components/titlebar/titlebar.dart'; import 'package:spotube/components/titlebar/titlebar_icon_buttons.dart'; import 'package:spotube/components/titlebar/window_button.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; @@ -20,6 +22,7 @@ class WindowTitleBarButtons extends HookConsumerWidget { final preferences = ref.watch(userPreferencesProvider); final isMaximized = useState(null); const type = ThemeType.auto; + final scale = context.theme.scaling; Future onClose() async { await windowManager.close(); @@ -34,7 +37,7 @@ class WindowTitleBarButtons extends HookConsumerWidget { return null; }, []); - if (!kIsDesktop || kIsMacOS || preferences.systemTitleBar) { + if (!kTitlebarVisible || preferences.systemTitleBar) { return const SizedBox.shrink(); } @@ -43,8 +46,8 @@ class WindowTitleBarButtons extends HookConsumerWidget { final colors = WindowButtonColors( normal: Colors.transparent, iconNormal: foregroundColor ?? theme.colorScheme.onSurface, - mouseOver: theme.colorScheme.onSurface.withOpacity(0.1), - mouseDown: theme.colorScheme.onSurface.withOpacity(0.2), + mouseOver: theme.colorScheme.onSurface.withAlpha(25), + mouseDown: theme.colorScheme.onSurface.withAlpha(51), iconMouseOver: theme.colorScheme.onSurface, iconMouseDown: theme.colorScheme.onSurface, ); @@ -58,8 +61,8 @@ class WindowTitleBarButtons extends HookConsumerWidget { iconMouseDown: Colors.black, ); - return Padding( - padding: const EdgeInsets.only(bottom: 25), + return Transform( + transform: Matrix4.translationValues(18, -12, 0) * scale, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -92,8 +95,8 @@ class WindowTitleBarButtons extends HookConsumerWidget { ); } - return Padding( - padding: const EdgeInsets.only(bottom: 20, left: 10), + return Transform( + transform: Matrix4.translationValues(18, -12, 0) * scale, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/components/titlebar/window_button.dart b/lib/components/titlebar/window_button.dart index 3201d191..fef9d754 100644 --- a/lib/components/titlebar/window_button.dart +++ b/lib/components/titlebar/window_button.dart @@ -1,8 +1,6 @@ -import 'dart:io'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; +import 'package:shadcn_flutter/shadcn_flutter.dart'; import 'package:spotube/components/titlebar/mouse_state.dart'; +import 'package:spotube/components/titlebar/titlebar.dart'; typedef WindowButtonIconBuilder = Widget Function( WindowButtonContext buttonContext); @@ -86,14 +84,7 @@ class WindowButton extends StatelessWidget { @override Widget build(BuildContext context) { - if (kIsWeb) { - return Container(); - } else { - // Don't show button on macOS - if (Platform.isMacOS) { - return Container(); - } - } + if (!kTitlebarVisible) return const SizedBox.shrink(); return MouseStateBuilder( builder: (context, mouseState) { @@ -103,11 +94,12 @@ class WindowButton extends StatelessWidget { backgroundColor: getBackgroundColor(mouseState), iconColor: getIconColor(mouseState)); - var icon = - (iconBuilder != null) ? iconBuilder!(buttonContext) : Container(); + var icon = (iconBuilder != null) + ? iconBuilder!(buttonContext) + : const SizedBox(); var fadeOutColor = - getBackgroundColor(MouseState()..isMouseOver = true).withOpacity(0); + getBackgroundColor(MouseState()..isMouseOver = true).withAlpha(0); var padding = this.padding ?? const EdgeInsets.all(10); var animationMs = mouseState.isMouseOver ? (animate ? 100 : 0) : (animate ? 200 : 0); diff --git a/lib/pages/home/home.dart b/lib/pages/home/home.dart index ea0a651b..78371c4d 100644 --- a/lib/pages/home/home.dart +++ b/lib/pages/home/home.dart @@ -36,7 +36,7 @@ class HomePage extends HookConsumerWidget { bottom: false, child: Scaffold( headers: [ - if (kIsWindows || kIsLinux) const TitleBar(), + if (kTitlebarVisible) const TitleBar(), ], child: CustomScrollView( controller: controller, diff --git a/lib/pages/library/library.dart b/lib/pages/library/library.dart index e107f413..87b6a6cb 100644 --- a/lib/pages/library/library.dart +++ b/lib/pages/library/library.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart' show Badge; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shadcn_flutter/shadcn_flutter.dart'; +import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:spotube/modules/library/user_local_tracks.dart'; import 'package:spotube/components/titlebar/titlebar.dart'; @@ -11,7 +12,6 @@ import 'package:spotube/modules/library/user_downloads.dart'; import 'package:spotube/modules/library/user_playlists.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/provider/download_manager_provider.dart'; -import 'package:spotube/utils/platform.dart'; class LibraryPage extends HookConsumerWidget { static const name = "library"; @@ -19,6 +19,7 @@ class LibraryPage extends HookConsumerWidget { const LibraryPage({super.key}); @override Widget build(BuildContext context, ref) { + final scale = context.theme.scaling; final downloadingCount = ref.watch(downloadManagerProvider).$downloadCount; final index = useState(0); @@ -38,20 +39,26 @@ class LibraryPage extends HookConsumerWidget { bottom: false, child: Scaffold( headers: [ - if (kIsWindows || kIsLinux) const TitleBar(), - SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: TabList( - index: index.value, - children: [ - for (final child in children) - TabButton( - child: child, - onPressed: () { - index.value = children.indexOf(child); - }, - ), - ], + TitleBar( + padding: const EdgeInsets.symmetric( + horizontal: 18, + vertical: 12, + ).copyWith(left: 0) * + scale, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: TabList( + index: index.value, + children: [ + for (final child in children) + TabButton( + child: child, + onPressed: () { + index.value = children.indexOf(child); + }, + ), + ], + ), ), ), const Gap(10), diff --git a/lib/pages/search/search.dart b/lib/pages/search/search.dart index 9e2bf20c..d0f59ce2 100644 --- a/lib/pages/search/search.dart +++ b/lib/pages/search/search.dart @@ -19,7 +19,6 @@ import 'package:spotube/pages/search/sections/tracks.dart'; import 'package:spotube/provider/authentication/authentication.dart'; import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/services/kv_store/kv_store.dart'; -import 'package:spotube/utils/platform.dart'; class SearchPage extends HookConsumerWidget { static const name = "search"; @@ -70,8 +69,7 @@ class SearchPage extends HookConsumerWidget { bottom: false, child: Scaffold( headers: [ - if (kIsWindows || kIsLinux) - const TitleBar(automaticallyImplyLeading: true) + if (kTitlebarVisible) const TitleBar(automaticallyImplyLeading: true) ], child: auth.asData?.value == null ? const AnonymousFallback() diff --git a/lib/pages/stats/stats.dart b/lib/pages/stats/stats.dart index a17e7562..e543900c 100644 --- a/lib/pages/stats/stats.dart +++ b/lib/pages/stats/stats.dart @@ -16,7 +16,7 @@ class StatsPage extends HookConsumerWidget { bottom: false, child: Scaffold( headers: [ - if (kIsWindows || kIsLinux) const TitleBar(), + if (kTitlebarVisible) const TitleBar(), ], child: CustomScrollView( slivers: [