mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
131 lines
3.8 KiB
Dart
131 lines
3.8 KiB
Dart
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:spotube/utils/platform.dart';
|
|
|
|
class TitleBarActionButtons extends StatelessWidget {
|
|
final Color? color;
|
|
const TitleBarActionButtons({
|
|
Key? key,
|
|
this.color,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return TextButtonTheme(
|
|
data: TextButtonThemeData(
|
|
style: ButtonStyle(
|
|
splashFactory: NoSplash.splashFactory,
|
|
shape: MaterialStateProperty.all(const RoundedRectangleBorder()),
|
|
overlayColor: MaterialStateProperty.all(Colors.black12),
|
|
padding: MaterialStateProperty.all(EdgeInsets.zero),
|
|
minimumSize: MaterialStateProperty.all(const Size(50, 40)),
|
|
maximumSize: MaterialStateProperty.all(const Size(50, 40)),
|
|
),
|
|
),
|
|
child: IconTheme(
|
|
data: const IconThemeData(size: 16),
|
|
child: Row(
|
|
children: [
|
|
TextButton(
|
|
onPressed: () {
|
|
appWindow.minimize();
|
|
},
|
|
style: ButtonStyle(
|
|
foregroundColor: MaterialStateProperty.all(
|
|
Theme.of(context).iconTheme.color),
|
|
),
|
|
child: Icon(
|
|
Icons.minimize_rounded,
|
|
color: color,
|
|
)),
|
|
TextButton(
|
|
onPressed: () async {
|
|
appWindow.maximizeOrRestore();
|
|
},
|
|
style: ButtonStyle(
|
|
foregroundColor: MaterialStateProperty.all(
|
|
Theme.of(context).iconTheme.color),
|
|
),
|
|
child: Icon(
|
|
Icons.crop_square_rounded,
|
|
color: color,
|
|
)),
|
|
TextButton(
|
|
onPressed: () {
|
|
appWindow.close();
|
|
},
|
|
style: ButtonStyle(
|
|
foregroundColor: MaterialStateProperty.all(
|
|
color ?? Theme.of(context).iconTheme.color),
|
|
overlayColor: MaterialStateProperty.all(Colors.redAccent),
|
|
),
|
|
child: const Icon(
|
|
Icons.close_rounded,
|
|
)),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class PageWindowTitleBar extends StatelessWidget
|
|
implements PreferredSizeWidget {
|
|
final Widget? leading;
|
|
final Widget? center;
|
|
final Color? backgroundColor;
|
|
final Color? foregroundColor;
|
|
final Size? _preferredSize;
|
|
const PageWindowTitleBar({
|
|
Key? key,
|
|
Size? preferredSize,
|
|
this.leading,
|
|
this.center,
|
|
this.backgroundColor,
|
|
this.foregroundColor,
|
|
}) : _preferredSize = preferredSize,
|
|
super(key: key);
|
|
|
|
static Size get staticPreferredSize => Size.fromHeight(
|
|
(kIsDesktop ? appWindow.titleBarHeight : 35),
|
|
);
|
|
|
|
@override
|
|
Size get preferredSize => _preferredSize ?? staticPreferredSize;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
if (kIsMobile) {
|
|
return PreferredSize(
|
|
preferredSize: const Size.fromHeight(300),
|
|
child: Container(
|
|
color: backgroundColor,
|
|
child: Row(
|
|
children: [
|
|
if (leading != null) leading!,
|
|
Expanded(child: Center(child: center)),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
return WindowTitleBarBox(
|
|
child: Container(
|
|
color: backgroundColor,
|
|
child: Row(
|
|
children: [
|
|
if (kIsMacOS)
|
|
SizedBox(
|
|
width: MediaQuery.of(context).size.width * 0.045,
|
|
),
|
|
if (leading != null) leading!,
|
|
Expanded(child: MoveWindow(child: Center(child: center))),
|
|
if (!kIsMacOS && !kIsMobile)
|
|
TitleBarActionButtons(color: foregroundColor)
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|