mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
Fixed no Settings icon on larger displays
Window size persistance support
This commit is contained in:
parent
708995d542
commit
42294b027a
@ -47,8 +47,8 @@ class Home extends HookConsumerWidget {
|
||||
md: 80,
|
||||
lg: 256,
|
||||
sm: 0,
|
||||
xl: 0,
|
||||
xxl: 0,
|
||||
xl: 256,
|
||||
xxl: 256,
|
||||
);
|
||||
final _selectedIndex = useState(0);
|
||||
_onSelectedIndexChanged(int index) => _selectedIndex.value = index;
|
||||
|
@ -37,7 +37,6 @@ class Sidebar extends HookConsumerWidget {
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final breakpoints = useBreakpoints();
|
||||
if (breakpoints.isSm) return Container();
|
||||
final extended = useState(false);
|
||||
final meSnapshot = ref.watch(currentUserQuery);
|
||||
final auth = ref.watch(authProvider);
|
||||
@ -46,8 +45,8 @@ class Sidebar extends HookConsumerWidget {
|
||||
md: 80,
|
||||
lg: 256,
|
||||
sm: 0,
|
||||
xl: 0,
|
||||
xxl: 0,
|
||||
xl: 256,
|
||||
xxl: 256,
|
||||
);
|
||||
|
||||
useEffect(() {
|
||||
@ -60,6 +59,8 @@ class Sidebar extends HookConsumerWidget {
|
||||
return null;
|
||||
});
|
||||
|
||||
if (breakpoints.isSm) return Container();
|
||||
|
||||
return SafeArea(
|
||||
child: Material(
|
||||
color: Theme.of(context).navigationRailTheme.backgroundColor,
|
||||
|
@ -1,3 +1,5 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:audio_service/audio_service.dart';
|
||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -5,8 +7,10 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:spotube/entities/CacheTrack.dart';
|
||||
import 'package:spotube/models/GoRouteDeclarations.dart';
|
||||
import 'package:spotube/models/LocalStorageKeys.dart';
|
||||
import 'package:spotube/models/Logger.dart';
|
||||
import 'package:spotube/provider/AudioPlayer.dart';
|
||||
import 'package:spotube/provider/Playback.dart';
|
||||
@ -23,13 +27,20 @@ void main() async {
|
||||
Hive.registerAdapter(CacheTrackEngagementAdapter());
|
||||
if (kIsDesktop) {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
// final client = DBusClient.session();
|
||||
// await client.registerObject(Media_Player());
|
||||
doWhenWindowReady(() {
|
||||
doWhenWindowReady(() async {
|
||||
final localStorage = await SharedPreferences.getInstance();
|
||||
final rawSize = localStorage.getString(LocalStorageKeys.windowSizeInfo);
|
||||
final savedSize = rawSize != null ? json.decode(rawSize) : null;
|
||||
final double? height = savedSize?["height"];
|
||||
final double? width = savedSize?["width"];
|
||||
appWindow.minSize = const Size(359, 700);
|
||||
appWindow.alignment = Alignment.center;
|
||||
appWindow.title = "Spotube";
|
||||
appWindow.maximize();
|
||||
if (height != null && width != null && height >= 700 && width >= 359) {
|
||||
appWindow.size = Size(width, height);
|
||||
} else {
|
||||
appWindow.maximize();
|
||||
}
|
||||
appWindow.show();
|
||||
});
|
||||
}
|
||||
@ -71,13 +82,52 @@ void main() async {
|
||||
));
|
||||
}
|
||||
|
||||
class Spotube extends HookConsumerWidget {
|
||||
class Spotube extends StatefulHookConsumerWidget {
|
||||
const Spotube({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_SpotubeState createState() => _SpotubeState();
|
||||
}
|
||||
|
||||
class _SpotubeState extends ConsumerState<Spotube> with WidgetsBindingObserver {
|
||||
final GoRouter _router = createGoRouter();
|
||||
final logger = getLogger(Spotube);
|
||||
SharedPreferences? localStorage;
|
||||
|
||||
Size? prevSize;
|
||||
|
||||
Spotube({Key? key}) : super(key: key);
|
||||
@override
|
||||
Widget build(BuildContext context, ref) {
|
||||
void initState() {
|
||||
super.initState();
|
||||
SharedPreferences.getInstance().then(((value) => localStorage = value));
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
WidgetsBinding.instance.removeObserver(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeMetrics() {
|
||||
super.didChangeMetrics();
|
||||
if (localStorage == null ||
|
||||
(prevSize?.width == appWindow.size.width &&
|
||||
prevSize?.height == appWindow.size.height) ||
|
||||
kIsMobile) return;
|
||||
localStorage!.setString(
|
||||
LocalStorageKeys.windowSizeInfo,
|
||||
jsonEncode({
|
||||
'width': appWindow.size.width,
|
||||
'height': appWindow.size.height,
|
||||
}),
|
||||
);
|
||||
prevSize = appWindow.size;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final themeMode =
|
||||
ref.watch(userPreferencesProvider.select((s) => s.themeMode));
|
||||
final accentMaterialColor =
|
||||
|
@ -16,4 +16,6 @@ abstract class LocalStorageKeys {
|
||||
static String playPauseHotKey = "play_pause_hot_key";
|
||||
|
||||
static String volume = "volume";
|
||||
|
||||
static String windowSizeInfo = "window_size_info";
|
||||
}
|
||||
|
@ -390,7 +390,7 @@ packages:
|
||||
name: flutter_hooks
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.18.4"
|
||||
version: "0.18.5+1"
|
||||
flutter_launcher_icons:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
|
Loading…
Reference in New Issue
Block a user