Skip to content

Commit

Permalink
feat(window_manager): rewrite window manager to be platform-safe
Browse files Browse the repository at this point in the history
  • Loading branch information
JagandeepBrar committed Mar 24, 2022
1 parent d37e8e2 commit d6aed6c
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 38 deletions.
1 change: 0 additions & 1 deletion lib/core/system.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
export 'system/configuration.dart';
export 'system/desktop_window.dart';
export 'system/flavor.dart';
export 'system/in_app_purchases.dart';
export 'system/localization.dart';
Expand Down
36 changes: 0 additions & 36 deletions lib/core/system/desktop_window.dart

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import '../window_manager.dart';

bool isPlatformSupported() => false;
LunaWindowManager getWindowManager() =>
throw UnsupportedError('LunaWindowManager unsupported');
48 changes: 48 additions & 0 deletions lib/core/system/window_manager/platform/window_manager_io.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';

import '../../platform.dart';
import '../window_manager.dart';

bool isPlatformSupported() => LunaPlatform().isDesktop;
LunaWindowManager getWindowManager() {
switch (defaultTargetPlatform) {
case TargetPlatform.linux:
case TargetPlatform.macOS:
case TargetPlatform.windows:
return IO();
default:
throw UnsupportedError('LunaWindowManager unsupported');
}
}

class IO implements LunaWindowManager {
@override
Future<void> initialize() async {
await windowManager.ensureInitialized();
windowManager.waitUntilReadyToShow().then((_) async {
const Size minSize = Size(
LunaWindowManager.MINIMUM_WINDOW_SIZE,
LunaWindowManager.MINIMUM_WINDOW_SIZE,
);
const Size size = Size(
LunaWindowManager.INITIAL_WINDOW_SIZE,
LunaWindowManager.INITIAL_WINDOW_SIZE,
);

if (!kDebugMode) await windowManager.setSize(size);
await windowManager.setMinimumSize(minSize);
setWindowTitle('LunaSea');

windowManager.show();
});
}

@override
Future<void> setWindowTitle(String title) async {
return windowManager
.waitUntilReadyToShow()
.then((_) async => await windowManager.setTitle(title));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import '../window_manager.dart';

bool isPlatformSupported() => false;
LunaWindowManager getWindowManager() =>
throw UnsupportedError('LunaWindowManager unsupported');
14 changes: 14 additions & 0 deletions lib/core/system/window_manager/window_manager.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'platform/window_manager_stub.dart'
if (dart.library.io) 'platform/window_manager_io.dart'
if (dart.library.html) 'platform/window_manager_html.dart';

abstract class LunaWindowManager {
static const double MINIMUM_WINDOW_SIZE = 400;
static const double INITIAL_WINDOW_SIZE = 700;

static bool get isSupported => isPlatformSupported();
factory LunaWindowManager() => getWindowManager();

Future<void> initialize();
Future<void> setWindowTitle(String title);
}
3 changes: 2 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:lunasea/core.dart';

import 'core/cache/image_cache/image_cache.dart';
import 'core/system/networking/networking.dart';
import 'core/system/window_manager/window_manager.dart';
import 'core/system/platform.dart';
import 'modules/dashboard/routes/dashboard/route.dart' show HomeRouter;

Expand All @@ -21,7 +22,7 @@ Future<void> main() async {
await LunaFirebase().initialize();
LunaLogger().initialize();
LunaTheme().initialize();
await LunaDesktopWindow().initialize();
if (LunaWindowManager.isSupported) await LunaWindowManager().initialize();
if (LunaNetworking.isSupported) LunaNetworking().initialize();
if (LunaImageCache.isSupported) LunaImageCache().initialize();
LunaRouter().initialize();
Expand Down

0 comments on commit d6aed6c

Please sign in to comment.