Skip to content

Commit cf9818f

Browse files
fix(desktop): restore native webui subwindows
1 parent 76c1c0a commit cf9818f

15 files changed

Lines changed: 153 additions & 351 deletions

desktop/flutter_app/lib/main.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
import 'package:flutter/widgets.dart';
2-
import 'package:desktop_multi_window/desktop_multi_window.dart';
32
import 'package:flutter_riverpod/flutter_riverpod.dart';
43

54
import 'src/app.dart';
6-
import 'src/core/platform/desktop_window_launch.dart';
75

8-
Future<void> main(List<String> args) async {
6+
void main() {
97
WidgetsFlutterBinding.ensureInitialized();
10-
final windowController = await WindowController.fromCurrentEngine();
11-
final launch = DesktopWindowLaunch.fromWindowArguments(
12-
windowController.arguments,
13-
);
14-
runApp(ProviderScope(child: AbkDesktopApp(launch: launch)));
8+
runApp(const ProviderScope(child: AbkDesktopApp()));
159
}

desktop/flutter_app/lib/src/app.dart

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
44
import 'package:go_router/go_router.dart';
55

66
import 'core/localization/app_strings.dart';
7-
import 'core/platform/desktop_window_launch.dart';
87
import 'core/theme/app_theme.dart';
98
import 'core/theme/desktop_theme_provider.dart';
109
import 'features/build/build_page.dart';
@@ -13,40 +12,13 @@ import 'features/device/device_page.dart';
1312
import 'features/home/home_page.dart';
1413
import 'features/settings/settings_page.dart';
1514
import 'features/shell/app_shell.dart';
16-
import 'features/webui/webui_window_page.dart';
1715

1816
class AbkDesktopApp extends ConsumerWidget {
19-
const AbkDesktopApp({
20-
super.key,
21-
this.launch = const DesktopWindowLaunch.main(),
22-
});
23-
24-
final DesktopWindowLaunch launch;
17+
const AbkDesktopApp({super.key});
2518

2619
@override
2720
Widget build(BuildContext context, WidgetRef ref) {
2821
final themeAsync = ref.watch(desktopThemeProvider);
29-
if (launch.isWebUi) {
30-
return MaterialApp(
31-
onGenerateTitle: (context) => AppStrings.of(context).appTitle,
32-
debugShowCheckedModeBanner: false,
33-
locale: const Locale('zh', 'CN'),
34-
supportedLocales: AppStrings.supportedLocales,
35-
localizationsDelegates: const [
36-
AppStrings.delegate,
37-
GlobalMaterialLocalizations.delegate,
38-
GlobalWidgetsLocalizations.delegate,
39-
GlobalCupertinoLocalizations.delegate,
40-
],
41-
theme:
42-
themeAsync.valueOrNull ??
43-
AppTheme.light(seedColor: AppTheme.fallbackSeedColor),
44-
home: WebUiWindowPage(
45-
url: launch.url!,
46-
title: launch.title ?? 'ABK WebUI',
47-
),
48-
);
49-
}
5022
final router = GoRouter(
5123
initialLocation: '/home',
5224
routes: [
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'package:flutter/services.dart';
2+
3+
abstract interface class DesktopWebUiApi {
4+
Future<bool> openWebUiWindow({required String url, required String title});
5+
}
6+
7+
class MethodChannelDesktopWebUiApi implements DesktopWebUiApi {
8+
static const MethodChannel _channel = MethodChannel(
9+
'com.abk.desktop/platform',
10+
);
11+
12+
@override
13+
Future<bool> openWebUiWindow({
14+
required String url,
15+
required String title,
16+
}) async {
17+
try {
18+
final opened = await _channel.invokeMethod<bool>('openWebUiWindow', {
19+
'url': url,
20+
'title': title,
21+
});
22+
return opened == true;
23+
} on MissingPluginException {
24+
return false;
25+
} on PlatformException {
26+
return false;
27+
}
28+
}
29+
}

desktop/flutter_app/lib/src/core/platform/desktop_webui_window.dart

Lines changed: 0 additions & 27 deletions
This file was deleted.

desktop/flutter_app/lib/src/core/platform/desktop_window_launch.dart

Lines changed: 0 additions & 57 deletions
This file was deleted.

desktop/flutter_app/lib/src/features/device/device_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import '../../core/localization/app_strings.dart';
1111
import '../../core/models/build_models.dart';
1212
import '../../core/models/device_models.dart';
1313
import '../../core/models/sidecar_models.dart';
14-
import '../../core/platform/desktop_webui_window.dart';
14+
import '../../core/platform/desktop_webui_api.dart';
1515
import '../../core/state/dashboard_controller.dart';
1616
import '../../widgets/panel_card.dart';
1717
import '../../widgets/status_pill.dart';
@@ -1995,7 +1995,7 @@ Future<void> _openModuleWebUi(
19951995
AbkRuntimeModule module,
19961996
) async {
19971997
final url = api.runtimeModuleWebUiUri(module.id).toString();
1998-
final opened = await DesktopMultiWindowWebUiWindow().open(
1998+
final opened = await MethodChannelDesktopWebUiApi().openWebUiWindow(
19991999
url: url,
20002000
title: module.displayName,
20012001
);

desktop/flutter_app/lib/src/features/webui/webui_window_page.dart

Lines changed: 0 additions & 115 deletions
This file was deleted.

desktop/flutter_app/linux/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR})
5353
# System-level dependencies.
5454
find_package(PkgConfig REQUIRED)
5555
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
56+
pkg_check_modules(WEBKIT2GTK REQUIRED IMPORTED_TARGET webkit2gtk-4.1)
5657

5758
# Application build; see runner/CMakeLists.txt.
5859
add_subdirectory("runner")

desktop/flutter_app/linux/flutter/generated_plugin_registrant.cc

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@
66

77
#include "generated_plugin_registrant.h"
88

9-
#include <desktop_multi_window/desktop_multi_window_plugin.h>
10-
#include <zikzak_inappwebview_linux/in_app_web_view_flutter_plugin.h>
119

1210
void fl_register_plugins(FlPluginRegistry* registry) {
13-
g_autoptr(FlPluginRegistrar) desktop_multi_window_registrar =
14-
fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopMultiWindowPlugin");
15-
desktop_multi_window_plugin_register_with_registrar(desktop_multi_window_registrar);
16-
g_autoptr(FlPluginRegistrar) zikzak_inappwebview_linux_registrar =
17-
fl_plugin_registry_get_registrar_for_plugin(registry, "InAppWebViewFlutterPlugin");
18-
in_app_web_view_flutter_plugin_register_with_registrar(zikzak_inappwebview_linux_registrar);
1911
}

desktop/flutter_app/linux/flutter/generated_plugins.cmake

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
#
44

55
list(APPEND FLUTTER_PLUGIN_LIST
6-
desktop_multi_window
7-
zikzak_inappwebview_linux
86
)
97

108
list(APPEND FLUTTER_FFI_PLUGIN_LIST

0 commit comments

Comments
 (0)