From 1d90397e9f597b1597a93360ee56f4db2a718f46 Mon Sep 17 00:00:00 2001 From: Booker Date: Mon, 25 May 2026 14:35:29 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20JavaScript=20?= =?UTF-8?q?=E9=80=9A=E9=81=93=E4=BB=A5=E5=A4=84=E7=90=86=E6=9D=A5=E8=87=AA?= =?UTF-8?q?=20WebView=20=E7=9A=84=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index 066017b..dec5a7e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -169,6 +169,10 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { }, ) ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..addJavaScriptChannel( + 'OpenIMFlutterShell', + onMessageReceived: _handleShellBridgeMessage, + ) ..setBackgroundColor(_shellBackground) ..setNavigationDelegate( NavigationDelegate( @@ -234,6 +238,22 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { return controller; } + void _handleShellBridgeMessage(JavaScriptMessage message) { + String? type; + try { + final decoded = jsonDecode(message.message); + if (decoded is Map) { + type = decoded['type'] as String?; + } + } catch (_) { + type = message.message; + } + + if (type == 'openAppSettings') { + unawaited(openAppSettings()); + } + } + void _showTransientShellCover() { _shellCoverTimer?.cancel(); if (mounted) {