From 4e45ead752a49d39d6cd991295e6269656f4903c Mon Sep 17 00:00:00 2001 From: Booker Date: Mon, 25 May 2026 11:48:56 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20URL=20=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=80=BB=E8=BE=91=E5=B9=B6=E6=B7=BB=E5=8A=A0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=93=81=E7=89=8C=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/config/app_config.dart | 21 ++------------------- lib/main.dart | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index c0c468d..3711100 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -17,14 +17,13 @@ class AppConfig { return _environmentHosts[currentEnvironment] ?? const []; } - static String homeUrl({String? appName, String? appLogo}) { + static String homeUrl({String? appName}) { final host = environmentHosts.isNotEmpty ? environmentHosts.first : 'h5-im.imharry.work'; return _withShellBranding( _normalizeHomeUrl(host), appName: appName, - appLogo: appLogo, ); } @@ -39,7 +38,6 @@ class AppConfig { static String _withShellBranding( String url, { String? appName, - String? appLogo, }) { final uri = Uri.parse(url); final queryParameters = Map.from(uri.queryParameters) @@ -50,21 +48,6 @@ class AppConfig { queryParameters['shell_app_name'] = trimmedName; } - final fragmentParameters = Map.from( - Uri.splitQueryString(uri.fragment), - ); - final trimmedLogo = (appLogo ?? AppConfig.appLogo).trim(); - if (trimmedLogo.isNotEmpty) { - fragmentParameters['shell_app_logo'] = trimmedLogo; - } - - return uri - .replace( - queryParameters: queryParameters, - fragment: fragmentParameters.isEmpty - ? null - : Uri(queryParameters: fragmentParameters).query, - ) - .toString(); + return uri.replace(queryParameters: queryParameters).toString(); } } diff --git a/lib/main.dart b/lib/main.dart index be1eff1..066017b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -124,7 +125,6 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { WidgetsBinding.instance.addObserver(this); _homeUrl = AppConfig.homeUrl( appName: widget.shellBranding.appName, - appLogo: widget.shellBranding.appLogo, ); _controller = _buildController()..loadRequest(Uri.parse(_homeUrl)); } @@ -187,6 +187,7 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { } }, onPageFinished: (_) { + unawaited(_syncShellBranding()); if (mounted) { setState(() { _progress = 100; @@ -253,6 +254,23 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { } } + Future _syncShellBranding() { + final payload = jsonEncode({ + 'name': widget.shellBranding.appName, + 'logo': widget.shellBranding.appLogo, + }); + final script = ''' +(() => { + try { + const brand = $payload; + window.sessionStorage.setItem('OPENIM_FLUTTER_SHELL_BRAND', JSON.stringify(brand)); + window.dispatchEvent(new CustomEvent('openim-shell-branding-updated', { detail: brand })); + } catch (_) {} +})(); +'''; + return _runJavaScriptSafely(script); + } + Future _stopWebMedia() { return _runJavaScriptSafely(_stopWebMediaScript); }