WebView(

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站制作、成都網(wǎng)站設計、化州網(wǎng)絡推廣、微信小程序、化州網(wǎng)絡營銷、化州企業(yè)策劃、化州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供化州建站搭建服務,24小時服務熱線:18982081108,官方網(wǎng)址:chinadenli.net
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: {
JavascriptChannel(
name: "AppNotifyInitSuccess", //JS調(diào)用AppNotifyInitSuccess.
onMessageReceived: (JavascriptMessage message) {
_jsCallBackJson = message.message;
showAppToast("獲取JS回傳數(shù)據(jù): ${message.message}");
}),
},
onWebViewCreated: (WebViewController controller) {
_webViewController = controller;
},
),
//Flutter 主動和WebView通信.
_webViewController.evaluateJavascript("updateAppDataInfo('Flutter通過JS修改')");
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調(diào)用了Flutter");
}
/script
需求,app中使用webview和h5交互,根據(jù)h5發(fā)過來的消息,在屏幕上展示flutter組件,并且可以發(fā)送消息給h5。
首先使用的組件是flutter_WebView_plugin,這個組件不能嵌套flutter組件,所以放棄這個組件。
flutter_inappbrowser 可以實現(xiàn)組合布局, 所以選用了此庫, GitHub鏈接
[
1.環(huán)境準備, 參考鏈接
2.添加國內(nèi)環(huán)境配置: 參考鏈接
3.新建
name: String類型,代表Channel的名字,也是其唯一標識符。
messager:BinaryMessenger類型,代表消息信使,是消息的發(fā)送與接收的工具。
codec: MessageCodec類型或MethodCodec類型,代表消息的編解碼器。
fluuter中的MessageCodec用于二進制格式數(shù)據(jù)與基礎數(shù)據(jù)之間的編解碼。BasicMessageChannel所使用的編解碼器就是MessageCodec。
iOS中,名稱為FlutterMessageCodec,是一個協(xié)議,定義了兩個方法:encode接收一個類型為id的消息,將其編碼為NSData類型,而decode接收NSData類型消息,將其解碼為id類型數(shù)據(jù)。
MessageCodec有多種不同的實現(xiàn):
與MessageCodec不同的是,MethodCodec用于MethodCall對象的編解碼,一個MethodCall對象代表一次從Flutter端發(fā)起的方法調(diào)用。MethodCall有2個成員變量:String類型的method代表需要調(diào)用的方法名稱,通用類型(Android中為Object,iOS中為id)的arguments代表需要調(diào)用的方法入?yún)?/p>
由于處理的是方法調(diào)用,故相比于MessageCodec,MethodCodec多了對調(diào)用結(jié)果的處理。當方法調(diào)用成功時,使用encodeSuccessEnvelope將result編碼為二進制數(shù)據(jù),而當方法調(diào)用失敗時,則使用encodeErrorEnvelope將error的code、message、detail編碼為二進制數(shù)據(jù)
MethodCodec有兩種實現(xiàn):
本文將為大家講解如何通過pub庫插件快速實現(xiàn)Flutter應用在雙屏Android設備上交互通信。
插件地址: flutter_subscreen_plugin
雙屏插件實現(xiàn)原理: FlutterPlugin 實現(xiàn)雙屏
主屏上的UI,我們添加一個按鈕,點擊生成一個隨機數(shù),發(fā)送給副屏顯示,用于驗證主屏與副屏的通信交互:
副屏ui上我們在initState中監(jiān)聽主屏給副屏的消息流,并將監(jiān)聽到的數(shù)據(jù)展示在文本上:
完成上述步驟,簡單的demo就做好了,如下是demo在實體設備的運行效果圖:
網(wǎng)站題目:flutter交互,flutter交互特效
文章地址:http://chinadenli.net/article19/dseihgh.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、定制開發(fā)、、靜態(tài)網(wǎng)站、外貿(mào)建站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)