Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@ import 'package:flutter/material.dart';

import 'package:catppuccin_flutter/catppuccin_flutter.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:window_manager/window_manager.dart';

import 'package:rattle/app.dart';
import 'package:rattle/constants/temp_dir.dart';
import 'package:rattle/providers/pty.dart';
import 'package:rattle/providers/settings.dart';
import 'package:rattle/utils/is_desktop.dart';
import 'package:rattle/utils/is_production.dart';
import 'package:rattle/utils/show_error.dart';
Expand Down Expand Up @@ -170,23 +172,21 @@ Future<void> main() async {

await windowManager.ensureInitialized();

WindowOptions windowOptions = const WindowOptions(
// Load saved window size from SharedPreferences.
final prefs = await SharedPreferences.getInstance();
final savedWidth = prefs.getDouble('windowWidth') ?? defaultWindowWidth;
final savedHeight = prefs.getDouble('windowHeight') ?? defaultWindowHeight;

WindowOptions windowOptions = WindowOptions(
// Setting [alwaysOnTop] here will ensure the desktop app starts on top of
// other apps on the desktop so that it is visible.
//
// We later turn it off as we don't want to force it always on top.
alwaysOnTop: true,

// We can override the size in the first instance by, for example in
// Linux, editing linux/my_application.cc.
//
// Setting it here has effect when Restarting the app while debugging.

// However, since Windows has 1280x720 by default in the windows-specific
// windows/runner/main.cpp, line 29, it is best not to override it here
// since under Windows 950x600 is too small.

// size: Size(950, 600),
// Use saved window size if available, otherwise use platform defaults
// The saved size is loaded from SharedPreferences
size: Size(savedWidth, savedHeight),

// The [title] is used for the window manager's window title.
title: 'Rattle - Data Science with R',
Expand Down
13 changes: 13 additions & 0 deletions lib/providers/settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,16 @@ final stripCommentsProvider = StateProvider<bool>((ref) => false);
final askOnExitProvider = StateProvider<bool>((ref) => true);

final ignoreMissingTargetProvider = StateProvider<bool>((ref) => true);

// Window size settings providers
// Default window size values (can be overridden by platform-specific defaults if needed)

const double defaultWindowWidth = 1280.0;
const double defaultWindowHeight = 720.0;

final windowWidthProvider = StateProvider<double>((ref) => defaultWindowWidth);

final windowHeightProvider =
StateProvider<double>((ref) => defaultWindowHeight);

final rememberWindowSizeProvider = StateProvider<bool>((ref) => true);
13 changes: 13 additions & 0 deletions lib/settings/dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import 'package:rattle/settings/sections/dataset_toggles.dart';
import 'package:rattle/settings/sections/graphic_theme.dart';
import 'package:rattle/settings/sections/script.dart';
import 'package:rattle/settings/sections/session.dart';
import 'package:rattle/settings/sections/window_size.dart';
import 'package:rattle/settings/utils/handle_cancel_button.dart';

class SettingsDialog extends ConsumerStatefulWidget {
Expand Down Expand Up @@ -117,6 +118,17 @@ class SettingsDialogState extends ConsumerState<SettingsDialog> {

ref.read(ignoreMissingTargetProvider.notifier).state =
prefs.getBool('ignoreMissingTarget') ?? true;

// Load window size settings from shared preferences

ref.read(windowWidthProvider.notifier).state =
prefs.getDouble('windowWidth') ?? defaultWindowWidth;

ref.read(windowHeightProvider.notifier).state =
prefs.getDouble('windowHeight') ?? defaultWindowHeight;

ref.read(rememberWindowSizeProvider.notifier).state =
prefs.getBool('rememberWindowSize') ?? true;
}

/// Load all numeric settings from shared preferences.
Expand Down Expand Up @@ -190,6 +202,7 @@ class SettingsDialogState extends ConsumerState<SettingsDialog> {
DatasetToggles(),
GraphicTheme(),
Session(),
WindowSize(),
Script(),
],
),
Expand Down
Loading
Loading