feat: 优化 URL 生成逻辑并添加同步品牌信息功能
This commit is contained in:
@@ -17,14 +17,13 @@ class AppConfig {
|
|||||||
return _environmentHosts[currentEnvironment] ?? const [];
|
return _environmentHosts[currentEnvironment] ?? const [];
|
||||||
}
|
}
|
||||||
|
|
||||||
static String homeUrl({String? appName, String? appLogo}) {
|
static String homeUrl({String? appName}) {
|
||||||
final host = environmentHosts.isNotEmpty
|
final host = environmentHosts.isNotEmpty
|
||||||
? environmentHosts.first
|
? environmentHosts.first
|
||||||
: 'h5-im.imharry.work';
|
: 'h5-im.imharry.work';
|
||||||
return _withShellBranding(
|
return _withShellBranding(
|
||||||
_normalizeHomeUrl(host),
|
_normalizeHomeUrl(host),
|
||||||
appName: appName,
|
appName: appName,
|
||||||
appLogo: appLogo,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +38,6 @@ class AppConfig {
|
|||||||
static String _withShellBranding(
|
static String _withShellBranding(
|
||||||
String url, {
|
String url, {
|
||||||
String? appName,
|
String? appName,
|
||||||
String? appLogo,
|
|
||||||
}) {
|
}) {
|
||||||
final uri = Uri.parse(url);
|
final uri = Uri.parse(url);
|
||||||
final queryParameters = Map<String, String>.from(uri.queryParameters)
|
final queryParameters = Map<String, String>.from(uri.queryParameters)
|
||||||
@@ -50,21 +48,6 @@ class AppConfig {
|
|||||||
queryParameters['shell_app_name'] = trimmedName;
|
queryParameters['shell_app_name'] = trimmedName;
|
||||||
}
|
}
|
||||||
|
|
||||||
final fragmentParameters = Map<String, String>.from(
|
return uri.replace(queryParameters: queryParameters).toString();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
@@ -124,7 +125,6 @@ class _H5ShellPageState extends State<H5ShellPage> with WidgetsBindingObserver {
|
|||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
_homeUrl = AppConfig.homeUrl(
|
_homeUrl = AppConfig.homeUrl(
|
||||||
appName: widget.shellBranding.appName,
|
appName: widget.shellBranding.appName,
|
||||||
appLogo: widget.shellBranding.appLogo,
|
|
||||||
);
|
);
|
||||||
_controller = _buildController()..loadRequest(Uri.parse(_homeUrl));
|
_controller = _buildController()..loadRequest(Uri.parse(_homeUrl));
|
||||||
}
|
}
|
||||||
@@ -187,6 +187,7 @@ class _H5ShellPageState extends State<H5ShellPage> with WidgetsBindingObserver {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onPageFinished: (_) {
|
onPageFinished: (_) {
|
||||||
|
unawaited(_syncShellBranding());
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_progress = 100;
|
_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() {
|
Future<void> _stopWebMedia() {
|
||||||
return _runJavaScriptSafely(_stopWebMediaScript);
|
return _runJavaScriptSafely(_stopWebMediaScript);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user