mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: Implement window size settings saving (#2648)
This commit addresses the feature request to save the window size settings. The application will now remember the user's preferred window size, allowing for a more personalized and seamless user experience. Fixes: #2544 Co-authored-by: Akarsh Jain <akarsh.jain.790@gmail.com>
This commit is contained in:
parent
65a910291b
commit
dac4bd88e0
@ -12,4 +12,10 @@ class KVKeys {
|
|||||||
/// - local
|
/// - local
|
||||||
/// - supabase
|
/// - supabase
|
||||||
static const String loginType = '$prefix.login_type';
|
static const String loginType = '$prefix.login_type';
|
||||||
|
|
||||||
|
/// The key for saving the window size
|
||||||
|
///
|
||||||
|
/// The value is a json string with the following format:
|
||||||
|
/// {'height': 600.0, 'width': 800.0}
|
||||||
|
static const String windowSize = 'windowSize';
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:math';
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
import 'package:appflowy/core/config/kv.dart';
|
||||||
|
import 'package:appflowy/core/config/kv_keys.dart';
|
||||||
|
import 'package:appflowy/startup/startup.dart';
|
||||||
|
|
||||||
|
class WindowSizeManager {
|
||||||
|
static const double minWindowHeight = 400.0;
|
||||||
|
static const double minWindowWidth = 600.0;
|
||||||
|
|
||||||
|
Future<void> saveSize(Size size) async {
|
||||||
|
final windowSize = {
|
||||||
|
'height': max(size.height, minWindowHeight),
|
||||||
|
'width': max(size.width, minWindowWidth),
|
||||||
|
};
|
||||||
|
|
||||||
|
await getIt<KeyValueStorage>().set(
|
||||||
|
KVKeys.windowSize,
|
||||||
|
jsonEncode(windowSize),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Size> getSize() async {
|
||||||
|
const defaultWindowSize = '{"height": 600.0, "width": 800.0}';
|
||||||
|
final windowSize = await getIt<KeyValueStorage>().get(KVKeys.windowSize);
|
||||||
|
final size = json.decode(
|
||||||
|
windowSize.fold(
|
||||||
|
(l) => defaultWindowSize,
|
||||||
|
(r) => r,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return Size(size['width']!, size['height']!);
|
||||||
|
}
|
||||||
|
}
|
@ -2,10 +2,12 @@ import 'dart:ui';
|
|||||||
|
|
||||||
import 'package:appflowy/core/helpers/helpers.dart';
|
import 'package:appflowy/core/helpers/helpers.dart';
|
||||||
import 'package:appflowy/startup/startup.dart';
|
import 'package:appflowy/startup/startup.dart';
|
||||||
|
import 'package:appflowy/startup/tasks/app_window_size_manager.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:window_manager/window_manager.dart';
|
import 'package:window_manager/window_manager.dart';
|
||||||
|
|
||||||
class InitAppWindowTask extends LaunchTask {
|
class InitAppWindowTask extends LaunchTask with WindowListener {
|
||||||
const InitAppWindowTask({
|
const InitAppWindowTask({
|
||||||
this.minimumSize = const Size(800, 600),
|
this.minimumSize = const Size(800, 600),
|
||||||
this.title = 'AppFlowy',
|
this.title = 'AppFlowy',
|
||||||
@ -22,9 +24,17 @@ class InitAppWindowTask extends LaunchTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await windowManager.ensureInitialized();
|
await windowManager.ensureInitialized();
|
||||||
|
windowManager.addListener(this);
|
||||||
|
|
||||||
WindowOptions windowOptions = WindowOptions(
|
final windowSize = await WindowSizeManager().getSize();
|
||||||
minimumSize: minimumSize,
|
|
||||||
|
final windowOptions = WindowOptions(
|
||||||
|
size: windowSize,
|
||||||
|
minimumSize: const Size(
|
||||||
|
WindowSizeManager.minWindowWidth,
|
||||||
|
WindowSizeManager.minWindowHeight,
|
||||||
|
),
|
||||||
|
center: true,
|
||||||
title: title,
|
title: title,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -33,4 +43,10 @@ class InitAppWindowTask extends LaunchTask {
|
|||||||
await windowManager.focus();
|
await windowManager.focus();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> onWindowResize() async {
|
||||||
|
final currentWindowSize = await windowManager.getSize();
|
||||||
|
WindowSizeManager().saveSize(currentWindowSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user