mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55: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,
|
md: 80,
|
||||||
lg: 256,
|
lg: 256,
|
||||||
sm: 0,
|
sm: 0,
|
||||||
xl: 0,
|
xl: 256,
|
||||||
xxl: 0,
|
xxl: 256,
|
||||||
);
|
);
|
||||||
final _selectedIndex = useState(0);
|
final _selectedIndex = useState(0);
|
||||||
_onSelectedIndexChanged(int index) => _selectedIndex.value = index;
|
_onSelectedIndexChanged(int index) => _selectedIndex.value = index;
|
||||||
|
@ -37,7 +37,6 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final breakpoints = useBreakpoints();
|
final breakpoints = useBreakpoints();
|
||||||
if (breakpoints.isSm) return Container();
|
|
||||||
final extended = useState(false);
|
final extended = useState(false);
|
||||||
final meSnapshot = ref.watch(currentUserQuery);
|
final meSnapshot = ref.watch(currentUserQuery);
|
||||||
final auth = ref.watch(authProvider);
|
final auth = ref.watch(authProvider);
|
||||||
@ -46,8 +45,8 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
md: 80,
|
md: 80,
|
||||||
lg: 256,
|
lg: 256,
|
||||||
sm: 0,
|
sm: 0,
|
||||||
xl: 0,
|
xl: 256,
|
||||||
xxl: 0,
|
xxl: 256,
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() {
|
useEffect(() {
|
||||||
@ -60,6 +59,8 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (breakpoints.isSm) return Container();
|
||||||
|
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
child: Material(
|
child: Material(
|
||||||
color: Theme.of(context).navigationRailTheme.backgroundColor,
|
color: Theme.of(context).navigationRailTheme.backgroundColor,
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:audio_service/audio_service.dart';
|
import 'package:audio_service/audio_service.dart';
|
||||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||||
import 'package:flutter/material.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:go_router/go_router.dart';
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:spotube/entities/CacheTrack.dart';
|
import 'package:spotube/entities/CacheTrack.dart';
|
||||||
import 'package:spotube/models/GoRouteDeclarations.dart';
|
import 'package:spotube/models/GoRouteDeclarations.dart';
|
||||||
|
import 'package:spotube/models/LocalStorageKeys.dart';
|
||||||
import 'package:spotube/models/Logger.dart';
|
import 'package:spotube/models/Logger.dart';
|
||||||
import 'package:spotube/provider/AudioPlayer.dart';
|
import 'package:spotube/provider/AudioPlayer.dart';
|
||||||
import 'package:spotube/provider/Playback.dart';
|
import 'package:spotube/provider/Playback.dart';
|
||||||
@ -23,13 +27,20 @@ void main() async {
|
|||||||
Hive.registerAdapter(CacheTrackEngagementAdapter());
|
Hive.registerAdapter(CacheTrackEngagementAdapter());
|
||||||
if (kIsDesktop) {
|
if (kIsDesktop) {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
// final client = DBusClient.session();
|
doWhenWindowReady(() async {
|
||||||
// await client.registerObject(Media_Player());
|
final localStorage = await SharedPreferences.getInstance();
|
||||||
doWhenWindowReady(() {
|
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.minSize = const Size(359, 700);
|
||||||
appWindow.alignment = Alignment.center;
|
appWindow.alignment = Alignment.center;
|
||||||
appWindow.title = "Spotube";
|
appWindow.title = "Spotube";
|
||||||
appWindow.maximize();
|
if (height != null && width != null && height >= 700 && width >= 359) {
|
||||||
|
appWindow.size = Size(width, height);
|
||||||
|
} else {
|
||||||
|
appWindow.maximize();
|
||||||
|
}
|
||||||
appWindow.show();
|
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 GoRouter _router = createGoRouter();
|
||||||
final logger = getLogger(Spotube);
|
final logger = getLogger(Spotube);
|
||||||
|
SharedPreferences? localStorage;
|
||||||
|
|
||||||
|
Size? prevSize;
|
||||||
|
|
||||||
Spotube({Key? key}) : super(key: key);
|
|
||||||
@override
|
@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 =
|
final themeMode =
|
||||||
ref.watch(userPreferencesProvider.select((s) => s.themeMode));
|
ref.watch(userPreferencesProvider.select((s) => s.themeMode));
|
||||||
final accentMaterialColor =
|
final accentMaterialColor =
|
||||||
|
@ -16,4 +16,6 @@ abstract class LocalStorageKeys {
|
|||||||
static String playPauseHotKey = "play_pause_hot_key";
|
static String playPauseHotKey = "play_pause_hot_key";
|
||||||
|
|
||||||
static String volume = "volume";
|
static String volume = "volume";
|
||||||
|
|
||||||
|
static String windowSizeInfo = "window_size_info";
|
||||||
}
|
}
|
||||||
|
@ -390,7 +390,7 @@ packages:
|
|||||||
name: flutter_hooks
|
name: flutter_hooks
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.18.4"
|
version: "0.18.5+1"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
Loading…
Reference in New Issue
Block a user