feat: 优化 URL 生成逻辑并添加同步品牌信息功能

This commit is contained in:
Booker
2026-05-25 11:48:56 +07:00
parent b836560e0e
commit 4e45ead752
2 changed files with 21 additions and 20 deletions

View File

@@ -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<String, String>.from(uri.queryParameters)
@@ -50,21 +48,6 @@ class AppConfig {
queryParameters['shell_app_name'] = trimmedName;
}
final fragmentParameters = Map<String, String>.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();
}
}

View File

@@ -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<H5ShellPage> 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<H5ShellPage> with WidgetsBindingObserver {
}
},
onPageFinished: (_) {
unawaited(_syncShellBranding());
if (mounted) {
setState(() {
_progress = 100;
@@ -253,6 +254,23 @@ class _H5ShellPageState extends State<H5ShellPage> with WidgetsBindingObserver {
}
}
Future<void> _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<void> _stopWebMedia() {
return _runJavaScriptSafely(_stopWebMediaScript);
}