feat: 添加 JavaScript 通道以处理来自 WebView 的消息

This commit is contained in:
Booker
2026-05-25 14:35:29 +07:00
parent 4e45ead752
commit 1d90397e9f

View File

@@ -169,6 +169,10 @@ class _H5ShellPageState extends State<H5ShellPage> with WidgetsBindingObserver {
}, },
) )
..setJavaScriptMode(JavaScriptMode.unrestricted) ..setJavaScriptMode(JavaScriptMode.unrestricted)
..addJavaScriptChannel(
'OpenIMFlutterShell',
onMessageReceived: _handleShellBridgeMessage,
)
..setBackgroundColor(_shellBackground) ..setBackgroundColor(_shellBackground)
..setNavigationDelegate( ..setNavigationDelegate(
NavigationDelegate( NavigationDelegate(
@@ -234,6 +238,22 @@ class _H5ShellPageState extends State<H5ShellPage> with WidgetsBindingObserver {
return controller; return controller;
} }
void _handleShellBridgeMessage(JavaScriptMessage message) {
String? type;
try {
final decoded = jsonDecode(message.message);
if (decoded is Map<String, dynamic>) {
type = decoded['type'] as String?;
}
} catch (_) {
type = message.message;
}
if (type == 'openAppSettings') {
unawaited(openAppSettings());
}
}
void _showTransientShellCover() { void _showTransientShellCover() {
_shellCoverTimer?.cancel(); _shellCoverTimer?.cancel();
if (mounted) { if (mounted) {