Flutter内嵌网页视图与页面调用插件flutter_inappwebview_pagecall的使用
在Flutter开发中,内嵌网页视图是一个非常常见的需求。flutter_inappwebview
插件提供了强大的功能来实现这一需求,并且 flutter_inappwebview_pagecall
插件进一步增强了与网页之间的交互能力。本文将通过一个完整的示例代码展示如何在Flutter应用中使用这两个插件。
示例代码说明
我们将构建一个简单的Flutter应用,其中包含一个内嵌的网页视图,并演示如何通过插件与网页进行交互。
依赖项
首先,在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
flutter:
sdk: flutter
flutter_inappwebview: ^6.0.0
flutter_inappwebview_pagecall: ^1.0.0
然后运行 flutter pub get
来安装这些依赖。
主代码结构
我们将在 lib/main.dart
中编写主逻辑。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_inappwebview_pagecall/flutter_inappwebview_pagecall.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: InAppWebViewPage(),
);
}
}
class InAppWebViewPage extends StatefulWidget {
[@override](/user/override)
_InAppWebViewPageState createState() => _InAppWebViewPageState();
}
class _InAppWebViewPageState extends State<InAppWebViewPage> {
late InAppWebViewController _webViewController;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('内嵌网页视图'),
),
body: InAppWebView(
initialUrlRequest: URLRequest(
url: Uri.parse("https://example.com"),
),
onWebViewCreated: (controller) {
_webViewController = controller;
},
onLoadStop: (controller, url) {
print("页面加载完成: $url");
},
onPageFinished: (controller, url) {
print("页面渲染完成: $url");
},
),
);
}
}
页面调用插件的使用
接下来,我们将展示如何使用 flutter_inappwebview_pagecall
插件来实现Flutter与网页之间的通信。
初始化插件
在 _InAppWebViewPageState
类中初始化插件:
late PageCallController _pageCallController;
[@override](/user/override)
void initState() {
super.initState();
_pageCallController = PageCallController();
}
注册事件监听器
在 onWebViewCreated
方法中注册事件监听器:
onWebViewCreated: (controller) {
_webViewController = controller;
_pageCallController.registerEventListener(_webViewController);
},
发送消息到网页
在需要发送消息的地方调用以下方法:
_pageCallController.sendMessageToWebview(
_webViewController,
message: '{"type": "customEvent", "data": "Hello from Flutter"}',
);
接收网页发送的消息
在网页端通过 JavaScript 调用 Pagecall
对象发送消息后,可以在 Flutter 端接收并处理:
_pageCallController.addMessageListener((message) {
print("收到网页消息: $message");
});
完整示例代码
以下是完整的示例代码:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_inappwebview_pagecall/flutter_inappwebview_pagecall.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: InAppWebViewPage(),
);
}
}
class InAppWebViewPage extends StatefulWidget {
[@override](/user/override)
_InAppWebViewPageState createState() => _InAppWebViewPageState();
}
class _InAppWebViewPageState extends State<InAppWebViewPage> {
late InAppWebViewController _webViewController;
late PageCallController _pageCallController;
[@override](/user/override)
void initState() {
super.initState();
_pageCallController = PageCallController();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('内嵌网页视图'),
),
body: InAppWebView(
initialUrlRequest: URLRequest(
url: Uri.parse("https://example.com"),
),
onWebViewCreated: (controller) {
_webViewController = controller;
_pageCallController.registerEventListener(_webViewController);
},
onLoadStop: (controller, url) {
print("页面加载完成: $url");
},
onPageFinished: (controller, url) {
print("页面渲染完成: $url");
},
),
);
}
[@override](/user/override)
void dispose() {
_pageCallController.unregisterEventListener(_webViewController);
super.dispose();
}
}
更多关于Flutter内嵌网页视图与页面调用插件flutter_inappwebview_pagecall的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter内嵌网页视图与页面调用插件flutter_inappwebview_pagecall的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你想在应用中嵌入网页视图,并且需要与网页进行交互(例如调用JavaScript函数或从网页接收回调),你可以使用 flutter_inappwebview
插件。flutter_inappwebview
是一个功能强大的插件,提供了比 Flutter 自带的 WebView
更多的功能和灵活性。
1. 安装 flutter_inappwebview
插件
首先,你需要在 pubspec.yaml
文件中添加 flutter_inappwebview
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_inappwebview: ^5.7.2+3
然后运行 flutter pub get
来安装插件。
2. 使用 flutter_inappwebview
嵌入网页视图
以下是一个简单的示例,展示如何在 Flutter 应用中嵌入一个网页视图:
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
class WebViewExample extends StatefulWidget {
@override
_WebViewExampleState createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<WebViewExample> {
InAppWebViewController? webViewController;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter InAppWebView Example'),
),
body: InAppWebView(
initialUrlRequest: URLRequest(url: Uri.parse('https://www.example.com')),
onWebViewCreated: (InAppWebViewController controller) {
webViewController = controller;
},
onLoadStart: (InAppWebViewController controller, Uri? url) {
print('Page started loading: $url');
},
onLoadStop: (InAppWebViewController controller, Uri? url) {
print('Page finished loading: $url');
},
onConsoleMessage: (InAppWebViewController controller, ConsoleMessage consoleMessage) {
print('Console Message: ${consoleMessage.message}');
},
),
);
}
}
3. 与网页进行交互
你可以使用 webViewController
来与网页进行交互。例如,调用 JavaScript 函数或从网页接收回调。
调用 JavaScript 函数
webViewController?.evaluateJavascript(source: "yourJavaScriptFunction()");
从网页接收回调
你可以通过 javascriptHandler
来注册一个 JavaScript 处理程序,以便从网页接收回调。
InAppWebView(
initialUrlRequest: URLRequest(url: Uri.parse('https://www.example.com')),
onWebViewCreated: (InAppWebViewController controller) {
webViewController = controller;
controller.addJavaScriptHandler(
handlerName: 'myHandler',
callback: (args) {
print('Received from JavaScript: $args');
},
);
},
);
在网页中,你可以通过以下方式调用这个处理程序:
window.flutter_inappwebview.callHandler('myHandler', 'Hello from JavaScript!');
4. 使用 flutter_inappwebview_pagecall
插件
flutter_inappwebview_pagecall
是一个基于 flutter_inappwebview
的插件,专门用于处理页面调用和回调。它提供了一种更简洁的方式来处理 Flutter 与网页之间的通信。
安装 flutter_inappwebview_pagecall
在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
flutter_inappwebview_pagecall: ^1.0.0
然后运行 flutter pub get
来安装插件。
使用 flutter_inappwebview_pagecall
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview_pagecall/flutter_inappwebview_pagecall.dart';
class PageCallExample extends StatefulWidget {
@override
_PageCallExampleState createState() => _PageCallExampleState();
}
class _PageCallExampleState extends State<PageCallExample> {
PageCallController? pageCallController;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter InAppWebView PageCall Example'),
),
body: PageCallWebView(
initialUrl: 'https://www.example.com',
onPageCallControllerCreated: (controller) {
pageCallController = controller;
controller.addHandler('myHandler', (args) {
print('Received from JavaScript: $args');
});
},
),
);
}
}
在网页中,你可以通过以下方式调用这个处理程序:
window.PageCall.callHandler('myHandler', 'Hello from JavaScript!');