mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
Refactor: app window logic (#1842)
* feat: add TargetPlatform `isDesktop` helper Safe and convenient way to check if the current platform is a desktop platform. * refactor: move window logic to separate class This is much cleaner and better encapsulated. Sets up an area for further window management in the future. Does not try to initialize on mobile or web, which would crash. * fix: isDesktop doc comment * fix: set window title Currently only displays "app_flowy" as the window title. This commit sets the window title to "AppFlowy" as part of the init process.
This commit is contained in:
parent
8588afcda6
commit
6c895ad4fe
1
frontend/app_flowy/lib/core/helpers/helpers.dart
Normal file
1
frontend/app_flowy/lib/core/helpers/helpers.dart
Normal file
@ -0,0 +1 @@
|
||||
export 'target_platform.dart';
|
11
frontend/app_flowy/lib/core/helpers/target_platform.dart
Normal file
11
frontend/app_flowy/lib/core/helpers/target_platform.dart
Normal file
@ -0,0 +1,11 @@
|
||||
import 'package:flutter/foundation.dart' show TargetPlatform;
|
||||
|
||||
extension TargetPlatformHelper on TargetPlatform {
|
||||
/// Convenience function to check if the app is running on a desktop computer.
|
||||
///
|
||||
/// Easily check if on desktop by checking `defaultTargetPlatform.isDesktop`.
|
||||
bool get isDesktop =>
|
||||
this == TargetPlatform.linux ||
|
||||
this == TargetPlatform.macOS ||
|
||||
this == TargetPlatform.windows;
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hotkey_manager/hotkey_manager.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
import 'startup/launch_configuration.dart';
|
||||
import 'startup/startup.dart';
|
||||
import 'user/presentation/splash_screen.dart';
|
||||
import 'window/window.dart';
|
||||
|
||||
class FlowyApp implements EntryPoint {
|
||||
@override
|
||||
@ -21,19 +21,8 @@ Future<void> main() async {
|
||||
|
||||
await EasyLocalization.ensureInitialized();
|
||||
await hotKeyManager.unregisterAll();
|
||||
await windowManager.ensureInitialized();
|
||||
|
||||
await setWindowOptions();
|
||||
await AppWindow.initialize();
|
||||
|
||||
await FlowyRunner.run(FlowyApp());
|
||||
}
|
||||
|
||||
Future<void> setWindowOptions() async {
|
||||
WindowOptions windowOptions = const WindowOptions(
|
||||
minimumSize: Size(600, 400),
|
||||
);
|
||||
return windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
await windowManager.show();
|
||||
await windowManager.focus();
|
||||
});
|
||||
}
|
||||
|
37
frontend/app_flowy/lib/window/app_window.dart
Normal file
37
frontend/app_flowy/lib/window/app_window.dart
Normal file
@ -0,0 +1,37 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:app_flowy/core/helpers/helpers.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
/// Represents the main window of the app.
|
||||
class AppWindow {
|
||||
/// The singleton instance of the window.
|
||||
static late AppWindow instance;
|
||||
|
||||
AppWindow._() {
|
||||
instance = this;
|
||||
}
|
||||
|
||||
/// Initializes the window.
|
||||
static Future<AppWindow?> initialize() async {
|
||||
// Don't initialize on mobile or web.
|
||||
if (!defaultTargetPlatform.isDesktop) {
|
||||
return null;
|
||||
}
|
||||
|
||||
await windowManager.ensureInitialized();
|
||||
|
||||
WindowOptions windowOptions = const WindowOptions(
|
||||
minimumSize: Size(600, 400),
|
||||
title: 'AppFlowy',
|
||||
);
|
||||
|
||||
await windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
await windowManager.show();
|
||||
await windowManager.focus();
|
||||
});
|
||||
|
||||
return AppWindow._();
|
||||
}
|
||||
}
|
1
frontend/app_flowy/lib/window/window.dart
Normal file
1
frontend/app_flowy/lib/window/window.dart
Normal file
@ -0,0 +1 @@
|
||||
export 'app_window.dart';
|
Loading…
Reference in New Issue
Block a user