Flutter?webview與網(wǎng)頁(yè)通訊交互實(shí)現(xiàn)
前言
在app開發(fā)中我們有JSBridge來(lái)實(shí)現(xiàn)app和網(wǎng)頁(yè)端通訊,現(xiàn)參考JSBridge實(shí)現(xiàn)了Flutter webview和網(wǎng)頁(yè)端通訊。
預(yù)覽
flutter
import 'package:ds_bridge/ds_bridge.dart';
class JsBridgeUtil {
// 向H5調(diào)用接口
static executeMethod(flutterWebViewPlugin, String jsonStr) async{
DsBridge dsBridge = DsBridge(flutterWebViewPlugin);
Result result = dsBridge.dispatch(jsonStr);
if(result.method == 'share'){
result.callBack('收到網(wǎng)頁(yè)端share事件,內(nèi)容為${result.data}并返回此文本給網(wǎng)頁(yè)');
}
if(result.method == 'share1'){
result.callBack('收到網(wǎng)頁(yè)端share1事件');
}
}
}網(wǎng)頁(yè)
import 'dsbridge_flutter'
dsBridge.call('share', { name: 'woyehaizaixiang' }, function (res) {
alert(res)
})具體實(shí)現(xiàn)
flutter中使用ds_bridge
此包是flutter_webview_pluginwebview與網(wǎng)頁(yè)交互的工具包,需要先添加flutter_webview_plugin組件,具體flutter_webview_plugin組件使用請(qǐng)前往官網(wǎng)查看 ,在添加flutter_webview_plugin組件后,添加ds_bridge組件
1.配置依賴包
dependencies:
ds_bridge: ^0.0.12.在webview頁(yè)面添加JavascriptChannel
webview.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:yundk_app/routes/application.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import '../../utils/JsBridgeUtil.dart';
class WebviewPage extends StatefulWidget {
final String url;
final VoidCallback backCallback;
WebviewPage({
Key key,
@required this.url,
this.backCallback,
}) : super(key: key);
@override
_WebviewPageState createState() => _WebviewPageState();
}
class _WebviewPageState extends State<WebviewPage> {
String _title = '';
final flutterWebViewPlugin = FlutterWebviewPlugin();
final Set<JavascriptChannel> jsChannels = [
JavascriptChannel(
name: 'DsBridgeApp',
onMessageReceived: (JavascriptMessage msg) {
String jsonStr = msg.message;
JsBridgeUtil.executeMethod(FlutterWebviewPlugin(), jsonStr);
}),
].toSet();
StreamSubscription<String> _onUrlChanged;
@override
void initState() {
super.initState();
flutterWebViewPlugin.close();
// 監(jiān)聽 url changed
_onUrlChanged =
flutterWebViewPlugin.onUrlChanged.listen((String url) async {
});
// 監(jiān)聽頁(yè)面onload
flutterWebViewPlugin.onStateChanged.listen((viewState) async {
if (viewState.type == WebViewState.finishLoad) {
flutterWebViewPlugin.evalJavascript('document.title').then((result) => {
setState(() {
_title = result;
})
});
}
});
}
@override
void dispose() {
_onUrlChanged.cancel();
flutterWebViewPlugin.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: WebviewScaffold(
appBar: new AppBar(
leading: IconButton(
hoverColor: Colors.transparent,
highlightColor: Colors.transparent,
icon: Icon(const IconData(0xe61b, fontFamily: 'IconFont'), color: Color(0xff333333), size: 18),
onPressed: (){
flutterWebViewPlugin.close();
Application.router.pop(context);
},
),
title: new Text(
_title,
style: TextStyle(color: Color(0xff333333), fontSize: 17),
),
actions: [
new IconButton(
icon: new Icon(
Icons.refresh_outlined,
color: Color(0xff333333),
size: 20
),
onPressed: () {
flutterWebViewPlugin.reload();
}
),
],
centerTitle: true,
elevation: 0,
),
url: widget.url,
javascriptChannels: jsChannels,
mediaPlaybackRequiresUserGesture: false,
withZoom: true,
withLocalStorage: true,
hidden: true,
)
);
}
}3.在JsBridgeUtil類中
utils/JsBridgeUtil.dart
import 'package:ds_bridge/ds_bridge.dart';
class JsBridgeUtil {
// 向H5調(diào)用接口
static executeMethod(flutterWebViewPlugin, String jsonStr) async{
DsBridge dsBridge = DsBridge(flutterWebViewPlugin);
Result result = dsBridge.dispatch(jsonStr);
if(result.method == 'share'){
result.callBack('收到網(wǎng)頁(yè)端share事件,內(nèi)容為${result.data}并返回此文本給網(wǎng)頁(yè)');
}
if(result.method == 'share1'){
result.callBack('收到網(wǎng)頁(yè)端share1事件');
}
}
}網(wǎng)頁(yè)端使用dsbridge_flutter
此插件為網(wǎng)頁(yè)端插件,配合flutter端ds_bridge一起使用
1.安裝
npm install dsbridge_flutter
2.使用
import 'dsbridge_flutter' dsBridge.call(<String> method, <Object> data, <Function> callback)
3.例子
import 'dsbridge_flutter'
dsBridge.call('share', { name: 'woyehaizaixiang' }, function (res) {
alert(res)
})總結(jié)
本文參考JSBridge實(shí)現(xiàn)了Flutter webview和網(wǎng)頁(yè)端交互。具體用到的插件有Flutter端flutter_webview_plugin和ds_bridge、網(wǎng)頁(yè)端有dsbridge_flutter。
到此這篇關(guān)于Flutter webview與網(wǎng)頁(yè)通訊交互實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Flutter webview與網(wǎng)頁(yè)通訊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)調(diào)用震動(dòng)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)調(diào)用震動(dòng)的方法,實(shí)例分析了Android中Vibrator類的調(diào)用與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android實(shí)現(xiàn)伸縮彈力分布菜單效果的示例
本文介紹下在Android中實(shí)現(xiàn)伸縮彈力分布菜單效果。這種效果比較炫酷,有需要的朋友可以參考一下。2016-10-10
在Android平臺(tái)上實(shí)現(xiàn)消息推送功能
隨著移動(dòng)互聯(lián)網(wǎng)應(yīng)用的飛速發(fā)展,消息推送已成為移動(dòng)應(yīng)用中不可或缺的功能,在Android平臺(tái)上,實(shí)現(xiàn)消息推送涉及到服務(wù)端的消息發(fā)送、客戶端的消息接收、通知渠道(Notification?Channels)的管理以及應(yīng)用在前臺(tái)和后臺(tái)不同狀態(tài)下的處理等多個(gè)方面,下面小編給大家詳細(xì)介紹一下2025-04-04
android 九宮格滑動(dòng)解鎖開機(jī)實(shí)例源碼學(xué)習(xí)
開機(jī)密碼的樣式種類多種多樣,五花八門.本文接下來(lái)介紹滑動(dòng)九宮格來(lái)達(dá)到開機(jī)目的,感興趣的朋友可以了解下2013-01-01
Android仿一號(hào)店貨物詳情輪播圖動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了Android-仿一號(hào)店貨物詳情輪播圖動(dòng)畫效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Android編程實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽EditText文本輸入的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽EditText文本輸入的方法,結(jié)合實(shí)例形式分析了EditText控件及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Flutter開發(fā)之支持放大鏡的輸入框功能實(shí)現(xiàn)
在Flutter開發(fā)時(shí),有時(shí)為了優(yōu)化用戶輸入體驗(yàn),往往會(huì)需要輸入框支持在移動(dòng)光標(biāo)過(guò)程中可以出現(xiàn)放大鏡功能。本文將為大家介紹實(shí)現(xiàn)的方法,需要的可以參考一下2022-02-02
RxJava入門指南及其在Android開發(fā)中的使用示例
RxJava是JVM的一個(gè)擴(kuò)展庫(kù),它能夠幫助Java更加方便地實(shí)現(xiàn)基于事件的編程,這對(duì)安卓來(lái)說(shuō)十分有用,接下來(lái)就一起來(lái)看一下RxJava入門指南及其在Android開發(fā)中的使用示例:2016-06-06
Android中判斷l(xiāng)istview是否滑動(dòng)到頂部和底部的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Android中判斷l(xiāng)istview是否滑動(dòng)到頂部和底部的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11

