new: no titlebar on desktop

This commit is contained in:
lollipopkit
2023-12-09 16:31:18 +08:00
parent cd9d5567fb
commit b2eb96ec16
19 changed files with 237 additions and 123 deletions

View File

@@ -586,7 +586,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -596,7 +596,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -720,7 +720,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -730,7 +730,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -748,7 +748,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -758,7 +758,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -779,7 +779,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -792,7 +792,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
@@ -818,7 +818,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -831,7 +831,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -854,7 +854,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -867,7 +867,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -890,7 +890,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -902,7 +902,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
@@ -931,7 +931,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -943,7 +943,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;
@@ -969,7 +969,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 665; CURRENT_PROJECT_VERSION = 667;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -981,7 +981,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.665; MARKETING_VERSION = 1.0.667;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;

View File

@@ -25,8 +25,7 @@ enum SSHErrType {
} }
class SSHErr extends Err<SSHErrType> { class SSHErr extends Err<SSHErrType> {
SSHErr({required super.type, super.message}) SSHErr({required super.type, super.message}) : super(from: ErrFrom.ssh);
: super(from: ErrFrom.ssh);
@override @override
String toString() { String toString() {
@@ -47,8 +46,7 @@ enum DockerErrType {
} }
class DockerErr extends Err<DockerErrType> { class DockerErr extends Err<DockerErrType> {
DockerErr({required super.type, super.message}) DockerErr({required super.type, super.message}) : super(from: ErrFrom.docker);
: super(from: ErrFrom.docker);
@override @override
String toString() { String toString() {
@@ -63,8 +61,7 @@ enum ICloudErrType {
} }
class ICloudErr extends Err<ICloudErrType> { class ICloudErr extends Err<ICloudErrType> {
ICloudErr({required super.type, super.message}) ICloudErr({required super.type, super.message}) : super(from: ErrFrom.icloud);
: super(from: ErrFrom.icloud);
@override @override
String toString() { String toString() {
@@ -79,8 +76,7 @@ enum WebdavErrType {
} }
class WebdavErr extends Err<WebdavErrType> { class WebdavErr extends Err<WebdavErrType> {
WebdavErr({required super.type, super.message}) WebdavErr({required super.type, super.message}) : super(from: ErrFrom.webdav);
: super(from: ErrFrom.webdav);
@override @override
String toString() { String toString() {

View File

@@ -2,9 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 665; static const int build = 667;
static const String engine = "3.16.2"; static const String engine = "3.16.2";
static const String buildAt = "2023-12-05 18:58:17"; static const String buildAt = "2023-12-09 14:56:57";
static const int modifications = 1; static const int modifications = 11;
static const int script = 31; static const int script = 31;
} }

View File

@@ -5,7 +5,6 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:macos_window_utils/window_manipulator.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:toolbox/core/channel/bg_run.dart'; import 'package:toolbox/core/channel/bg_run.dart';
@@ -15,6 +14,7 @@ import 'package:toolbox/core/utils/sync/webdav.dart';
import 'package:toolbox/data/res/logger.dart'; import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/provider.dart'; import 'package:toolbox/data/res/provider.dart';
import 'package:toolbox/data/res/store.dart'; import 'package:toolbox/data/res/store.dart';
import 'package:window_manager/window_manager.dart';
import 'app.dart'; import 'app.dart';
import 'core/analysis.dart'; import 'core/analysis.dart';
@@ -66,14 +66,15 @@ void _runInZone(void Function() body) {
body, body,
(obj, trace) { (obj, trace) {
Analysis.recordException(trace); Analysis.recordException(trace);
Loggers.root.warning(obj); Loggers.root.warning(obj, null, trace);
}, },
zoneSpecification: zoneSpec, zoneSpecification: zoneSpec,
); );
} }
Future<void> initApp() async { Future<void> initApp() async {
await _initMacOSWindow(); WidgetsFlutterBinding.ensureInitialized();
await _initDesktopWindow();
// Base of all data. // Base of all data.
await _initDb(); await _initDb();
@@ -125,12 +126,19 @@ void _setupLogger() {
}); });
} }
Future<void> _initMacOSWindow() async { Future<void> _initDesktopWindow() async {
if (!isMacOS) return; if (!isDesktop) return;
WidgetsFlutterBinding.ensureInitialized(); await windowManager.ensureInitialized();
await WindowManipulator.initialize(); const windowOptions = WindowOptions(
WindowManipulator.makeTitlebarTransparent(); size: Size(400, 777),
WindowManipulator.enableFullSizeContentView(); center: true,
WindowManipulator.hideTitle(); backgroundColor: Colors.transparent,
await CustomAppBar.updateTitlebarHeight(); skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden,
);
if (isMacOS) await CustomAppBar.updateTitlebarHeight();
windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
} }

View File

@@ -33,8 +33,8 @@ class _AndroidSettingsPageState extends State<AndroidSettingsPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: const CustomAppBar(
title: const Text('Android'), title: Text('Android'),
), ),
body: ListView( body: ListView(
padding: const EdgeInsets.symmetric(horizontal: 17), padding: const EdgeInsets.symmetric(horizontal: 17),

View File

@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_highlight/theme_map.dart'; import 'package:flutter_highlight/theme_map.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:toolbox/core/build_mode.dart';
import 'package:toolbox/core/extension/colorx.dart'; import 'package:toolbox/core/extension/colorx.dart';
import 'package:toolbox/core/extension/context/common.dart'; import 'package:toolbox/core/extension/context/common.dart';
import 'package:toolbox/core/extension/context/locale.dart'; import 'package:toolbox/core/extension/context/locale.dart';
@@ -123,25 +124,28 @@ class _SettingPageState extends State<SettingPage> {
), ),
/// Only for debug, this will cause the app to crash /// Only for debug, this will cause the app to crash
// onDoubleTap: () => context.showRoundDialog( onDoubleTap: () => context.showRoundDialog(
// title: Text(l10n.attention), title: Text(l10n.attention),
// child: Text(l10n.sureDelete(l10n.all)), child: Text(l10n.askContinue(
// actions: [ 'Delete all data from disk, and exit the app?',
// TextButton( )),
// onPressed: () { actions: [
// Stores.docker.box.deleteFromDisk(); TextButton(
// Stores.server.box.deleteFromDisk(); onPressed: () {
// Stores.setting.box.deleteFromDisk(); if (!BuildMode.isDebug) return;
// Stores.history.box.deleteFromDisk(); Stores.docker.box.deleteFromDisk();
// Stores.snippet.box.deleteFromDisk(); Stores.server.box.deleteFromDisk();
// Stores.key.box.deleteFromDisk(); Stores.setting.box.deleteFromDisk();
// exit(0); Stores.history.box.deleteFromDisk();
// }, Stores.snippet.box.deleteFromDisk();
// child: Text(l10n.ok, Stores.key.box.deleteFromDisk();
// style: const TextStyle(color: Colors.red)), exit(0);
// ), },
// ], child: Text(l10n.ok,
// ), style: const TextStyle(color: Colors.red)),
),
],
),
child: const Icon(Icons.delete), child: const Icon(Icons.delete),
), ),
), ),
@@ -160,8 +164,8 @@ class _SettingPageState extends State<SettingPage> {
_buildSFTP(), _buildSFTP(),
_buildTitle(l10n.editor), _buildTitle(l10n.editor),
_buildEditor(), _buildEditor(),
_buildTitle(l10n.fullScreen), if (isDesktop) _buildTitle(l10n.fullScreen),
_buildFullScreen(), if (isDesktop) _buildFullScreen(),
const SizedBox(height: 37), const SizedBox(height: 37),
], ],
), ),

View File

@@ -34,8 +34,8 @@ class _IOSSettingsPageState extends State<IOSSettingsPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: const CustomAppBar(
title: const Text('iOS'), title: Text('iOS'),
), ),
body: ListView( body: ListView(
padding: const EdgeInsets.symmetric(horizontal: 17), padding: const EdgeInsets.symmetric(horizontal: 17),

View File

@@ -1,22 +1,95 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:macos_window_utils/window_manipulator.dart'; import 'package:window_manager/window_manager.dart';
double? _titlebarHeight; int? _titlebarHeight;
bool _drawTitlebar = false;
class CustomAppBar extends AppBar implements PreferredSizeWidget { class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
CustomAppBar({ const CustomAppBar({
super.key, super.key,
super.title, this.title,
super.actions, this.actions,
super.centerTitle, this.centerTitle,
super.leading, this.leading,
super.backgroundColor, this.backgroundColor,
}) : super(toolbarHeight: (_titlebarHeight ?? 0) + kToolbarHeight); });
final Widget? title;
final List<Widget>? actions;
final bool? centerTitle;
final Widget? leading;
final Color? backgroundColor;
@override
Widget build(BuildContext context) {
final bar = AppBar(
key: key,
title: title,
actions: actions,
centerTitle: centerTitle,
leading: leading,
backgroundColor: backgroundColor,
toolbarHeight: (_titlebarHeight ?? 0) + kToolbarHeight,
);
if (!_drawTitlebar) return bar;
return Stack(
children: [
bar,
Positioned(
right: 0,
top: 0,
child: Row(
children: [
const SizedBox(width: 8),
IconButton(
icon: const Icon(Icons.minimize),
onPressed: () => windowManager.minimize(),
),
const SizedBox(width: 8),
IconButton(
icon: const Icon(Icons.crop_square),
onPressed: () async {
if (await windowManager.isMaximized()) {
windowManager.unmaximize();
} else {
windowManager.maximize();
}
},
),
const SizedBox(width: 8),
IconButton(
icon: const Icon(Icons.close),
onPressed: () => windowManager.close(),
),
const SizedBox(width: 8),
],
),
),
],
);
}
static Future<void> updateTitlebarHeight() async { static Future<void> updateTitlebarHeight() async {
final newTitlebarHeight = await WindowManipulator.getTitlebarHeight(); switch (Platform.operatingSystem) {
case 'macos':
final newTitlebarHeight = await windowManager.getTitleBarHeight();
if (_titlebarHeight != newTitlebarHeight) { if (_titlebarHeight != newTitlebarHeight) {
_titlebarHeight = newTitlebarHeight; _titlebarHeight = newTitlebarHeight;
} }
break;
// Draw a titlebar on Linux
case 'linux' || 'windows':
_titlebarHeight = 27;
_drawTitlebar = true;
break;
default:
break;
} }
} }
@override
Size get preferredSize =>
Size.fromHeight((_titlebarHeight ?? 0) + kToolbarHeight);
}

View File

@@ -7,13 +7,21 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <dynamic_color/dynamic_color_plugin.h> #include <dynamic_color/dynamic_color_plugin.h>
#include <screen_retriever/screen_retriever_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h> #include <url_launcher_linux/url_launcher_plugin.h>
#include <window_manager/window_manager_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) { void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) dynamic_color_registrar = g_autoptr(FlPluginRegistrar) dynamic_color_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin"); fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin");
dynamic_color_plugin_register_with_registrar(dynamic_color_registrar); dynamic_color_plugin_register_with_registrar(dynamic_color_registrar);
g_autoptr(FlPluginRegistrar) screen_retriever_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin");
screen_retriever_plugin_register_with_registrar(screen_retriever_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
g_autoptr(FlPluginRegistrar) window_manager_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "WindowManagerPlugin");
window_manager_plugin_register_with_registrar(window_manager_registrar);
} }

View File

@@ -4,7 +4,9 @@
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
dynamic_color dynamic_color
screen_retriever
url_launcher_linux url_launcher_linux
window_manager
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST

View File

@@ -7,18 +7,20 @@ import Foundation
import dynamic_color import dynamic_color
import icloud_storage import icloud_storage
import macos_window_utils
import path_provider_foundation import path_provider_foundation
import screen_retriever
import share_plus import share_plus
import shared_preferences_foundation import shared_preferences_foundation
import url_launcher_macos import url_launcher_macos
import window_manager
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin"))
IcloudStoragePlugin.register(with: registry.registrar(forPlugin: "IcloudStoragePlugin")) IcloudStoragePlugin.register(with: registry.registrar(forPlugin: "IcloudStoragePlugin"))
MacOSWindowUtilsPlugin.register(with: registry.registrar(forPlugin: "MacOSWindowUtilsPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin"))
} }

View File

@@ -4,11 +4,11 @@ PODS:
- FlutterMacOS (1.0.0) - FlutterMacOS (1.0.0)
- icloud_storage (0.0.1): - icloud_storage (0.0.1):
- FlutterMacOS - FlutterMacOS
- macos_window_utils (1.0.0):
- FlutterMacOS
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- screen_retriever (0.0.1):
- FlutterMacOS
- share_plus (0.0.1): - share_plus (0.0.1):
- FlutterMacOS - FlutterMacOS
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
@@ -16,16 +16,19 @@ PODS:
- FlutterMacOS - FlutterMacOS
- url_launcher_macos (0.0.1): - url_launcher_macos (0.0.1):
- FlutterMacOS - FlutterMacOS
- window_manager (0.2.0):
- FlutterMacOS
DEPENDENCIES: DEPENDENCIES:
- dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`) - dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`)
- FlutterMacOS (from `Flutter/ephemeral`) - FlutterMacOS (from `Flutter/ephemeral`)
- icloud_storage (from `Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos`) - icloud_storage (from `Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos`)
- macos_window_utils (from `Flutter/ephemeral/.symlinks/plugins/macos_window_utils/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
EXTERNAL SOURCES: EXTERNAL SOURCES:
dynamic_color: dynamic_color:
@@ -34,26 +37,29 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral :path: Flutter/ephemeral
icloud_storage: icloud_storage:
:path: Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos :path: Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos
macos_window_utils:
:path: Flutter/ephemeral/.symlinks/plugins/macos_window_utils/macos
path_provider_foundation: path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
screen_retriever:
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
share_plus: share_plus:
:path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos
shared_preferences_foundation: shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
url_launcher_macos: url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
window_manager:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
SPEC CHECKSUMS: SPEC CHECKSUMS:
dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
icloud_storage: 33b05299e26d1391d724da8d62860e702380a1cd icloud_storage: 33b05299e26d1391d724da8d62860e702380a1cd
macos_window_utils: 933f91f64805e2eb91a5bd057cf97cd097276663
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7 share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d

View File

@@ -226,7 +226,6 @@
33CC10EC2044A3C60003C045 = { 33CC10EC2044A3C60003C045 = {
CreatedOnToolsVersion = 9.2; CreatedOnToolsVersion = 9.2;
LastSwiftMigration = 1100; LastSwiftMigration = 1100;
ProvisioningStyle = Automatic;
SystemCapabilities = { SystemCapabilities = {
com.apple.Sandbox = { com.apple.Sandbox = {
enabled = 1; enabled = 1;
@@ -442,6 +441,7 @@
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@@ -574,6 +574,7 @@
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@@ -595,11 +596,12 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",

View File

@@ -4,11 +4,5 @@
// future. If not, the values below would default to using the project name when this becomes a // future. If not, the values below would default to using the project name when this becomes a
// 'flutter create' template. // 'flutter create' template.
// The application's name. By default this is also the title of the Flutter window.
PRODUCT_NAME = server_box
// The application's bundle identifier
PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox
// The copyright displayed in application information // The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2023 tech.lolli. All rights reserved. PRODUCT_COPYRIGHT = Copyright © 2023 tech.lolli. All rights reserved.

View File

@@ -5,6 +5,7 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
const appName = 'ServerBox'; const appName = 'ServerBox';
final appNameLower = appName.toLowerCase();
const buildDataFilePath = 'lib/data/res/build_data.dart'; const buildDataFilePath = 'lib/data/res/build_data.dart';
const apkPath = 'build/app/outputs/flutter-apk/app-release.apk'; const apkPath = 'build/app/outputs/flutter-apk/app-release.apk';
@@ -159,47 +160,49 @@ Future<void> flutterBuildAndroid() async {
Future<void> flutterBuildLinux() async { Future<void> flutterBuildLinux() async {
await flutterBuild('linux'); await flutterBuild('linux');
// mkdir ServerBox.AppDir const appDirName = '$appName.AppDir';
await Process.run('mkdir', ['ServerBox.AppDir']); // mkdir appName.AppDir
// cp -r build/linux/x64/release/bundle/* ServerBox.AppDir await Process.run('mkdir', [appDirName]);
// cp -r build/linux/x64/release/bundle/* appName.AppDir
await Process.run('cp', [ await Process.run('cp', [
'-r', '-r',
'./build/linux/x64/release/bundle/*', './build/linux/x64/release/bundle/*',
'ServerBox.AppDir', appDirName,
]); ]);
// cp -r assets/app_icon.png ServerBox.AppDir // cp -r assets/app_icon.png ServerBox.AppDir
await Process.run('cp', [ await Process.run('cp', [
'-r', '-r',
'./assets/app_icon.png', './assets/app_icon.png',
'ServerBox.AppDir', appDirName,
]); ]);
// Create AppRun // Create AppRun
const appRun = ''' const appRun = '''
#!/bin/sh #!/bin/sh
cd "\$(dirname "\$0")" cd "\$(dirname "\$0")"
exec ./ServerBox exec ./$appName
'''; ''';
await File('ServerBox.AppDir/AppRun').writeAsString(appRun); const appRunName = '$appDirName/AppRun';
await File(appRunName).writeAsString(appRun);
// chmod +x AppRun // chmod +x AppRun
await Process.run('chmod', ['+x', 'ServerBox.AppDir/AppRun']); await Process.run('chmod', ['+x', appRunName]);
// Create .desktop // Create .desktop
const desktop = ''' const desktop = '''
[Desktop Entry] [Desktop Entry]
Name=ServerBox Name=$appName
Exec=ServerBox Exec=$appName
Icon=app_icon Icon=app_icon
Type=Application Type=Application
Categories=Network; Categories=Network;
'''; ''';
await File('ServerBox.AppDir/ServerBox.desktop').writeAsString(desktop); await File('$appDirName/$appName.desktop').writeAsString(desktop);
// Run appimagetool // Run appimagetool
await Process.run('appimagetool', ['ServerBox.AppDir']); await Process.run('appimagetool', [appDirName]);
await scpLinux2CDN(); await scpLinux2CDN();
// Clean build files // Clean build files
await Process.run('rm', ['-r', 'ServerBox.AppDir']); await Process.run('rm', ['-r', appDirName]);
await Process.run('rm', ['ServerBox-x86_64.AppImage']); await Process.run('rm', ['$appName-x86_64.AppImage']);
} }
Future<void> flutterBuildWin() async { Future<void> flutterBuildWin() async {
@@ -212,7 +215,7 @@ Future<void> scpApk2CDN() async {
print('SHA256: $sha256'); print('SHA256: $sha256');
final result = await Process.run( final result = await Process.run(
'scp', 'scp',
[apkPath, 'hk:/var/www/res/serverbox/$sha256.apk'], [apkPath, 'hk:/var/www/res/$appNameLower/$sha256.apk'],
runInShell: true, runInShell: true,
); );
if (result.exitCode != 0) { if (result.exitCode != 0) {
@@ -225,8 +228,8 @@ Future<void> scpLinux2CDN() async {
final result = await Process.run( final result = await Process.run(
'scp', 'scp',
[ [
'ServerBox-x86_64.AppImage', '$appName-x86_64.AppImage',
'hk:/var/www/res/serverbox/$build.AppImage', 'hk:/var/www/res/$appNameLower/$build.AppImage',
], ],
runInShell: true, runInShell: true,
); );
@@ -241,8 +244,8 @@ Future<void> scpWindows2CDN() async {
final result = await Process.run( final result = await Process.run(
'scp', 'scp',
[ [
'./build/windows/runner/Release/server_box.zip', './build/windows/runner/Release/$appName.zip',
'hk:/var/www/res/serverbox/$build.zip', 'hk:/var/www/res/$appNameLower/$build.zip',
], ],
runInShell: true, runInShell: true,
); );

View File

@@ -582,14 +582,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
macos_window_utils:
dependency: "direct main"
description:
name: macos_window_utils
sha256: b3dfd47bbc605f0e315af684b50370a8f84932267aaa542098063fa384d593bd
url: "https://pub.dev"
source: hosted
version: "1.4.0"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@@ -798,6 +790,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.8+2" version: "0.3.8+2"
screen_retriever:
dependency: transitive
description:
name: screen_retriever
sha256: "6ee02c8a1158e6dae7ca430da79436e3b1c9563c8cf02f524af997c201ac2b90"
url: "https://pub.dev"
source: hosted
version: "0.1.9"
share_plus: share_plus:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -1133,6 +1133,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.1.1" version: "5.1.1"
window_manager:
dependency: "direct main"
description:
name: window_manager
sha256: dcc865277f26a7dad263a47d0e405d77e21f12cb71f30333a52710a408690bd7
url: "https://pub.dev"
source: hosted
version: "0.3.7"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:

View File

@@ -49,7 +49,6 @@ dependencies:
flutter_highlight: ^0.7.0 flutter_highlight: ^0.7.0
code_text_field: ^1.1.0 code_text_field: ^1.1.0
shared_preferences: ^2.1.1 shared_preferences: ^2.1.1
macos_window_utils: ^1.2.0
dynamic_color: ^1.6.6 dynamic_color: ^1.6.6
icloud_storage: ^2.2.0 icloud_storage: ^2.2.0
local_auth: ^2.1.7 local_auth: ^2.1.7
@@ -60,11 +59,12 @@ dependencies:
url: https://github.com/lollipopkit/watch_connectivity url: https://github.com/lollipopkit/watch_connectivity
choice: ^2.0.0 choice: ^2.0.0
#flutter_secure_storage: ^9.0.0 #flutter_secure_storage: ^9.0.0
xml: ^6.4.2 xml: ^6.4.2 # for parsing nvidia-smi
webdav_client: webdav_client:
git: git:
ref: main ref: main
url: https://github.com/lollipopkit/webdav_client url: https://github.com/lollipopkit/webdav_client
window_manager: ^0.3.7
dev_dependencies: dev_dependencies:
flutter_native_splash: ^2.1.6 flutter_native_splash: ^2.1.6

View File

@@ -8,16 +8,22 @@
#include <dynamic_color/dynamic_color_plugin_c_api.h> #include <dynamic_color/dynamic_color_plugin_c_api.h>
#include <local_auth_windows/local_auth_plugin.h> #include <local_auth_windows/local_auth_plugin.h>
#include <screen_retriever/screen_retriever_plugin.h>
#include <share_plus/share_plus_windows_plugin_c_api.h> #include <share_plus/share_plus_windows_plugin_c_api.h>
#include <url_launcher_windows/url_launcher_windows.h> #include <url_launcher_windows/url_launcher_windows.h>
#include <window_manager/window_manager_plugin.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
DynamicColorPluginCApiRegisterWithRegistrar( DynamicColorPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("DynamicColorPluginCApi")); registry->GetRegistrarForPlugin("DynamicColorPluginCApi"));
LocalAuthPluginRegisterWithRegistrar( LocalAuthPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("LocalAuthPlugin")); registry->GetRegistrarForPlugin("LocalAuthPlugin"));
ScreenRetrieverPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ScreenRetrieverPlugin"));
SharePlusWindowsPluginCApiRegisterWithRegistrar( SharePlusWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
UrlLauncherWindowsRegisterWithRegistrar( UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows")); registry->GetRegistrarForPlugin("UrlLauncherWindows"));
WindowManagerPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("WindowManagerPlugin"));
} }

View File

@@ -5,8 +5,10 @@
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
dynamic_color dynamic_color
local_auth_windows local_auth_windows
screen_retriever
share_plus share_plus
url_launcher_windows url_launcher_windows
window_manager
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST