Desktop-Enhancements (#1434)

* feat: Add minimum size for macos app * fix: Adjust font sizing and spaces in wallet list page and wallet selection dropdown

Adegoke David committed May 6, 2024 at 20:14 UTC cd41766e697a23f1d8c2945526825062daf573cd
6 files changed +43 -4
cw_core/lib/window_size.dart new
+22
@@ -0,0 +1,22 @@
1 +import 'dart:io';
2 +
3 +import 'package:flutter/services.dart';
4 +
5 +const MethodChannel _channel = MethodChannel('com.cake_wallet/native_utils');
6 +
7 +Future<void> setDefaultMinimumWindowSize() async {
8 + if (!Platform.isMacOS) return;
9 +
10 + try {
11 + final result = await _channel.invokeMethod(
12 + 'setMinWindowSize',
13 + {'width': 500, 'height': 700},
14 + ) as bool;
15 +
16 + if (!result) {
17 + print("Failed to set minimum window size.");
18 + }
19 + } on PlatformException catch (e) {
20 + print("Failed to set minimum window size: '${e.message}'.");
21 + }
22 +}
lib/main.dart
+3
@@ -41,6 +41,7 @@ import 'package:uni_links/uni_links.dart';
41 import 'package:cw_core/unspent_coins_info.dart';
42 import 'package:cake_wallet/monero/monero.dart';
43 import 'package:cw_core/cake_hive.dart';
44 +import 'package:cw_core/window_size.dart';
45
46 final navigatorKey = GlobalKey<NavigatorState>();
47 final rootKey = GlobalKey<RootState>();
@@ -60,6 +61,8 @@ Future<void> main() async {
61 return true;
62 };
63
64 + await setDefaultMinimumWindowSize();
65 +
66 await CakeHive.close();
67
68 await initializeAppConfigs();
lib/src/screens/dashboard/desktop_widgets/dropdown_item_widget.dart
+1 -1
@@ -22,7 +22,7 @@ class DropDownItemWidget extends StatelessWidget {
22 child: Text(
23 title,
24 style: TextStyle(
25 - fontSize: 22,
25 + fontSize: 18,
26 fontWeight: FontWeight.w500,
27 color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
28 ),
lib/src/screens/settings/desktop_settings/desktop_settings_page.dart
+1 -1
@@ -38,7 +38,7 @@ class _DesktopSettingsPageState extends State<DesktopSettingsPage> {
38 crossAxisAlignment: CrossAxisAlignment.start,
39 children: [
40 Padding(
41 - padding: const EdgeInsets.all(24),
41 + padding: const EdgeInsets.fromLTRB(24, 24, 24, 4),
42 child: Text(
43 S.current.settings,
44 style: textXLarge(),
lib/src/screens/wallet_list/wallet_list_page.dart
+1 -1
@@ -171,7 +171,7 @@ class WalletListBodyState extends State<WalletListBody> {
171 maxLines: null,
172 softWrap: true,
173 style: TextStyle(
174 - fontSize: 20,
174 + fontSize: DeviceInfo.instance.isDesktop ? 18 : 20,
175 fontWeight: FontWeight.w500,
176 color: Theme.of(context)
177 .extension<CakeTextTheme>()!
macos/Runner/AppDelegate.swift
+15 -1
@@ -24,7 +24,21 @@ class AppDelegate: FlutterAppDelegate {
24 }
25
26 result(secRandom(count: count))
27 -
27 + case "setMinWindowSize":
28 + guard let self = self else {
29 + result(false)
30 + return
31 + }
32 + if let arguments = call.arguments as? [String: Any],
33 + let width = arguments["width"] as? Double,
34 + let height = arguments["height"] as? Double {
35 + DispatchQueue.main.async {
36 + self.mainFlutterWindow?.minSize = CGSize(width: width, height: height)
37 + }
38 + result(true)
39 + } else {
40 + result(false)
41 + }
42 default:
43 result(FlutterMethodNotImplemented)
44 }