appbridgenewplus 1.0.0-beta.1
appbridgenewplus: ^1.0.0-beta.1 copied to clipboard
A versatile Flutter plugin for integrating various platform-specific functionalities and bridging communication with web views. It provides modules for UI, navigation, live activities, events, downloa [...]
appbridgenewplus #
SDK 初始化流程 #
本节详细介绍了 AppBridge SDK 的初始化方式以及 H5 页面与 Flutter 应用程序之间如何建立通信。
1. Flutter AppBridgeWebView Widget 初始化 #
当在 Flutter 应用程序中创建并显示 AppBridgeWebView widget 时:
AppBridgeWebView的initState方法被调用。assets/app_bridge.jsJavaScript 文件被加载到内存中。该脚本包含用于 H5 页面的window.AppBridge接口。- 配置一个
WebViewController,启用 WebView 中的 JavaScript 执行。 - 注册一个名为
AppBridgeChannel的关键JavaScriptChannel。该通道充当 H5 (JavaScript) 向 Flutter (Dart) 端发送消息(方法调用)的桥梁。在此处接收到的消息由_handleAppBridgeMessage函数处理。 AppBridgeH5接口.md文档中定义的所有module.method处理程序(例如core.getVersion、app.getStatus)都与其各自的 Dart 实现注册。
2. JavaScript 接口 (window.AppBridge) 注入 #
WebView 成功加载网页后:
- 已加载的
assets/app_bridge.js内容被注入到 WebView 的 JavaScript 上下文。 - 此注入脚本定义了全局
window.AppBridge对象,使所有指定的 AppBridge 方法可用于 H5 页面(例如window.AppBridge.core.getVersion())。 - 每个
window.AppBridge方法内部都会调用一个_callNative()辅助函数,用于准备发送给 Flutter 端的消息。
3. H5 到 Flutter 通信(方法调用) #
当 H5 页面调用 AppBridge 方法(例如 window.AppBridge.core.getVersion())时:
- 注入的 JavaScript 中的
_callNative()函数会生成一个唯一的callId并创建一个 JavaScriptPromise。它存储与该callId关联的 Promise 的resolve和reject函数。 - 方法详细信息(模块、方法名、参数和
callId)被序列化为 JSON 字符串。 - 然后,此 JSON 字符串通过
window.AppBridgeChannel.postMessage()发送到 Flutter 应用程序。
4. Flutter 处理和响应 #
收到来自 H5 端的消息后:
- Flutter 应用程序的
_handleAppBridgeMessage函数处理传入的 JSON 字符串。 - 它反序列化 JSON 以提取
callId、模块、方法和参数。 - 执行相应的 Dart 处理函数(例如,
core.getVersion的_handleGetVersion)。 - Dart 函数的结果(包含
code、data和msg的AppBridgeResponse)随后与原始callId一起序列化。 - 此响应 JSON 通过在 WebView 的 JavaScript 上下文中执行
window.AppBridge._handleResponse(responseJson)发送回 H5 页面。
5. H5 Promise 解析 #
回到 H5 页面:
window.AppBridge._handleResponse函数接收来自 Flutter 的响应 JSON。- 它解析 JSON,检索
callId,并使用它来查找原始 JavaScriptPromise的已存储的resolve或reject函数。 - 根据
AppBridgeResponse中的code值(0 表示成功,非零表示错误),Promise将被解析(带有data)或拒绝(带有code和msg),从而完成 H5 端的异步操作。