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); }