feat: 优化 URL 生成逻辑并添加同步品牌信息功能
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user