Flutter?webview與網(wǎng)頁通訊交互實現(xiàn)
前言
在app開發(fā)中我們有JSBridge來實現(xiàn)app和網(wǎng)頁端通訊,現(xiàn)參考JSBridge實現(xiàn)了Flutter webview和網(wǎng)頁端通訊。
預覽
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)頁端share事件,內(nèi)容為${result.data}并返回此文本給網(wǎng)頁');
}
if(result.method == 'share1'){
result.callBack('收到網(wǎng)頁端share1事件');
}
}
}網(wǎng)頁
import 'dsbridge_flutter'
dsBridge.call('share', { name: 'woyehaizaixiang' }, function (res) {
alert(res)
})具體實現(xiàn)
flutter中使用ds_bridge
此包是flutter_webview_pluginwebview與網(wǎng)頁交互的工具包,需要先添加flutter_webview_plugin組件,具體flutter_webview_plugin組件使用請前往官網(wǎng)查看 ,在添加flutter_webview_plugin組件后,添加ds_bridge組件
1.配置依賴包
dependencies:
ds_bridge: ^0.0.12.在webview頁面添加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)聽頁面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)頁端share事件,內(nèi)容為${result.data}并返回此文本給網(wǎng)頁');
}
if(result.method == 'share1'){
result.callBack('收到網(wǎng)頁端share1事件');
}
}
}網(wǎng)頁端使用dsbridge_flutter
此插件為網(wǎng)頁端插件,配合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實現(xiàn)了Flutter webview和網(wǎng)頁端交互。具體用到的插件有Flutter端flutter_webview_plugin和ds_bridge、網(wǎng)頁端有dsbridge_flutter。
到此這篇關(guān)于Flutter webview與網(wǎng)頁通訊交互實現(xiàn)的文章就介紹到這了,更多相關(guān)Flutter webview與網(wǎng)頁通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android編程實現(xiàn)實時監(jiān)聽EditText文本輸入的方法
這篇文章主要介紹了Android編程實現(xiàn)實時監(jiān)聽EditText文本輸入的方法,結(jié)合實例形式分析了EditText控件及事件響應相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Flutter開發(fā)之支持放大鏡的輸入框功能實現(xiàn)
在Flutter開發(fā)時,有時為了優(yōu)化用戶輸入體驗,往往會需要輸入框支持在移動光標過程中可以出現(xiàn)放大鏡功能。本文將為大家介紹實現(xiàn)的方法,需要的可以參考一下2022-02-02
RxJava入門指南及其在Android開發(fā)中的使用示例
RxJava是JVM的一個擴展庫,它能夠幫助Java更加方便地實現(xiàn)基于事件的編程,這對安卓來說十分有用,接下來就一起來看一下RxJava入門指南及其在Android開發(fā)中的使用示例:2016-06-06
Android中判斷l(xiāng)istview是否滑動到頂部和底部的實現(xiàn)方法
下面小編就為大家分享一篇Android中判斷l(xiāng)istview是否滑動到頂部和底部的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11

