直播365足球-beat365投注网站-bst365官网

Flutter网页视图与页面调用插件webview_flutter_pagecall_poc的使用

在Flutter应用中,嵌入网页是非常常见的需求。webview_flutter 插件提供了强大的功能来实现这一需求,并且可以通过 webview_flutter_pagecall_poc 插件实

Flutter网页视图与页面调用插件webview_flutter_pagecall_poc的使用

在Flutter应用中,嵌入网页是非常常见的需求。webview_flutter 插件提供了强大的功能来实现这一需求,并且可以通过 webview_flutter_pagecall_poc 插件实现网页与Flutter页面之间的双向通信。

1. 引入依赖

首先,在 pubspec.yaml 文件中添加 webview_flutter 和 webview_flutter_pagecall_poc 的依赖:

dependencies:

flutter:

sdk: flutter

webview_flutter: ^4.0.0

webview_flutter_pagecall_poc: ^1.0.0

然后运行 flutter pub get 来安装这些依赖。

2. 配置 Android 和 iOS

Android

确保 minSdkVersion 至少为 19:

android {

defaultConfig {

minSdkVersion 19

}

}

iOS

确保 Xcode 版本支持 WKWebView(通常 Xcode 10 及以上)。

3. 基本使用示例

以下是一个完整的示例代码,展示如何使用 webview_flutter 和 webview_flutter_pagecall_poc 插件:

// 导入必要的库

import 'package:flutter/material.dart';

import 'package:webview_flutter/webview_flutter.dart';

import 'package:webview_flutter_pagecall_poc/webview_flutter_pagecall_poc.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

home: WebViewPage(),

);

}

}

class WebViewPage extends StatefulWidget {

@override

_WebViewPageState createState() => _WebViewPageState();

}

class _WebViewPageState extends State {

late WebViewController _controller;

@override

void initState() {

super.initState();

// 初始化 WebView 控制器

_controller = WebViewController()

..setJavaScriptMode(JavaScriptMode.unrestricted)

..setNavigationDelegate(NavigationDelegate(

onProgress: (int progress) {

print('Loading progress: $progress%');

},

onPageStarted: (String url) {

print('Page started loading: $url');

},

onPageFinished: (String url) {

print('Page finished loading: $url');

},

))

..loadRequest(Uri.parse('https://example.com'));

// 添加 PageCall 支持

_controller.addPageCallHandler((message) {

print('Received message from web: $message');

return 'Response from Flutter';

});

}

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text('WebView with PageCall'),

),

body: WebViewWidget(controller: _controller),

);

}

}

4. 关键功能说明

4.1 加载网页

通过 WebViewController.loadRequest() 方法加载指定的 URL 或本地文件。

_controller.loadRequest(Uri.parse('https://example.com'));

4.2 设置 JavaScript 模式

允许或禁止执行 JavaScript:

_controller.setJavaScriptMode(JavaScriptMode.unrestricted);

4.3 页面导航拦截

通过 NavigationDelegate 拦截页面跳转请求:

_navigationDelegate: NavigationDelegate(

onNavigationRequest: (NavigationRequest request) {

if (request.url.startsWith('https://youtube.com')) {

return NavigationDecision.prevent; // 阻止跳转到 YouTube

}

return NavigationDecision.navigate; // 允许其他跳转

},

),

4.4 双向通信(PageCall)

使用 addPageCallHandler 注册一个处理函数,用于接收来自网页的消息并返回响应。

_controller.addPageCallHandler((message) {

print('Received message from web: $message');

return 'Response from Flutter';

});

在网页端可以调用以下 JavaScript 代码发送消息:

window.flutter_inappwebview.callHandler('pageCallHandler', 'Hello from web!');

5. 完整 Demo 效果

运行上述代码后,您将看到一个带有 WebView 的页面,能够加载指定的网页并支持从网页向 Flutter 传递消息。同时,您可以点击按钮触发 Flutter 向网页发送响应。

6. 注意事项

权限设置:确保您的 AndroidManifest.xml 文件中包含网络访问权限:

调试模式:在 Android 上启用 WebView 调试功能(可选):

AndroidWebViewController.enableDebugging(true);

← 上一篇: 都知道成吉思汗胜率高,为何很少有人玩?800场狼狗玩家说出实情
下一篇: 法律上轻伤二级要判多久? →

相关推荐

TCP连接重置,到底怎么回事?还是得网工大佬来分析!

TCP连接重置,到底怎么回事?还是得网工大佬来分析!

如果服务器发送RST包拒绝连接,一般可能由如下原因导致: 服务器端口未开放:服务器在该端口未运行网络服务,或服务器上客户所请求的服务

奥运会回放在哪可以看

奥运会回放在哪可以看

2021奥运会直播回放可以在央视频app、咪咕视频app、Acfun体育频道看,回放只能通过电视观看cctv5节目或者下载央视影音软件,通过网络收看中央

暗影王子 玛尔扎哈 皮肤

暗影王子 玛尔扎哈 皮肤

lolskin.infokkmetHexfuserالعربية (ar-ae)Čeština (cs-cz)Deutsch (de-de)Ελληνικά (el-gr)English (en-us)Español (es-ar)Español (es-es)Español (es-mx)Français (fr-fr)Magyar

历史上真的存在暗卫吗?暗卫的生活都是怎么样的?

历史上真的存在暗卫吗?暗卫的生活都是怎么样的?

影视剧中经常看见帝王身边总有一支没有姓名没有容貌的暗卫,为国家进行各种阴暗处的事件,那么历史上真的存在暗卫吗?暗卫生活都是怎么样

Switch 2食人花造型相機 HORI官方授權造型可愛

Switch 2食人花造型相機 HORI官方授權造型可愛

Switch 2將有《超級瑪利歐》中的食人花造型攝影機。 Nintendo Switch 2即將有全新的Game Chat功能,可​​連接USB攝影機進行視訊通話,需要額外購買

银川灯具市场各具特色

银川灯具市场各具特色

银川市位于黄河上游宁夏平原中部,东以黄河为界,西依贺兰山,南接吴忠市,北连平罗县,市区面积1482平方公里,辖三区两县一市,总人口133