十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
现阶段只做了信息传输
成都网站建设哪家好,找创新互联!专注于网页设计、重庆网站建设、微信开发、微信小程序开发、集团成都定制网页设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:混凝土搅拌机等众多领域,积累了大量丰富的经验,同时也获得了客户的一致赞许!
使用的是 BasicMessageChannel
iOS 端
该方法写在中
flutter端
在需要调用的地方执行 sendMessage 以获取reply内容
使用 MethodChannel
iOS端
可以根据不同的消息callback不同的信息
该方法写在中
flutter 端
本文将为大家讲解如何通过pub库插件快速实现Flutter应用在双屏Android设备上交互通信。
插件地址: flutter_subscreen_plugin
双屏插件实现原理: FlutterPlugin 实现双屏
主屏上的UI,我们添加一个按钮,点击生成一个随机数,发送给副屏显示,用于验证主屏与副屏的通信交互:
副屏ui上我们在initState中监听主屏给副屏的消息流,并将监听到的数据展示在文本上:
完成上述步骤,简单的demo就做好了,如下是demo在实体设备的运行效果图:
flutter 部分
Container(
height: 200,
clipBehavior: Clip.none,
child: WebView(
initialUrl: 'about:blank',
onWebViewCreated: (WebViewController webViewController) {
_webViewController = webViewController;
_loadHtmlFromAssets();
},
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: JavascriptChannel[
_alertJavascriptChannel(context),
].toSet(),
),
)
JavascriptChannel _alertJavascriptChannel(BuildContext context) {
return JavascriptChannel(
name: 'Toastxxx',
onMessageReceived: (JavascriptMessage message) {
print('============****${message.message}');
});
}
HTML部分
button onclick="callFlutter()"callFlutter/button
script
function callFlutter() {
Toastxxx.postMessage("JS调用了Flutter");
}
/script
WebView(
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: {
JavascriptChannel(
name: "AppNotifyInitSuccess", //JS调用AppNotifyInitSuccess.
onMessageReceived: (JavascriptMessage message) {
_jsCallBackJson = message.message;
showAppToast("获取JS回传数据: ${message.message}");
}),
},
onWebViewCreated: (WebViewController controller) {
_webViewController = controller;
},
),
//Flutter 主动和WebView通信.
_webViewController.evaluateJavascript("updateAppDataInfo('Flutter通过JS修改')");
1.环境准备, 参考链接
2.添加国内环境配置: 参考链接
3.新建
name: String类型,代表Channel的名字,也是其唯一标识符。
messager:BinaryMessenger类型,代表消息信使,是消息的发送与接收的工具。
codec: MessageCodec类型或MethodCodec类型,代表消息的编解码器。
fluuter中的MessageCodec用于二进制格式数据与基础数据之间的编解码。BasicMessageChannel所使用的编解码器就是MessageCodec。
iOS中,名称为FlutterMessageCodec,是一个协议,定义了两个方法:encode接收一个类型为id的消息,将其编码为NSData类型,而decode接收NSData类型消息,将其解码为id类型数据。
MessageCodec有多种不同的实现:
与MessageCodec不同的是,MethodCodec用于MethodCall对象的编解码,一个MethodCall对象代表一次从Flutter端发起的方法调用。MethodCall有2个成员变量:String类型的method代表需要调用的方法名称,通用类型(Android中为Object,iOS中为id)的arguments代表需要调用的方法入参
由于处理的是方法调用,故相比于MessageCodec,MethodCodec多了对调用结果的处理。当方法调用成功时,使用encodeSuccessEnvelope将result编码为二进制数据,而当方法调用失败时,则使用encodeErrorEnvelope将error的code、message、detail编码为二进制数据
MethodCodec有两种实现:
需求,app中使用webview和h5交互,根据h5发过来的消息,在屏幕上展示flutter组件,并且可以发送消息给h5。
首先使用的组件是flutter_WebView_plugin,这个组件不能嵌套flutter组件,所以放弃这个组件。
flutter_inappbrowser 可以实现组合布局, 所以选用了此库, GitHub链接
[