Fixed no Settings icon on larger displays

Window size persistance support
This commit is contained in:
Kingkor Roy Tirtho 2022-07-13 19:22:58 +06:00
parent 708995d542
commit 42294b027a
5 changed files with 66 additions and 13 deletions

View File

@ -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;

View File

@ -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,

View File

@ -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";
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 =

View File

@ -16,4 +16,6 @@ abstract class LocalStorageKeys {
static String playPauseHotKey = "play_pause_hot_key";
static String volume = "volume";
static String windowSizeInfo = "window_size_info";
}

View File

@ -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: