Flutter网页视图插件webview_dart的使用
Flutter网页视图插件webview_dart的使用
Dart Webview
Dart bindings for webview, 一个用于构建现代跨平台GUI的小型跨平台Web视图库。
安装
创建新项目
dart create myapp
添加依赖
运行以下命令从项目目录中添加webview_dart
:
dart pub add webview_dart
或者在pubspec.yaml
文件中添加:
dependencies:
webview_dart: ^1.0.0
平台特定配置
Windows
从发布页面下载预构建的Windows二进制文件,并将它们放在根目录下的out
文件夹中。
注意:你需要将这些文件与最终的可执行文件一起分发。
文件结构应如下所示:
myapp
|
+---- out
| |
| +--- webview.dll
| |
| +--- webview2loader.dll
|
+--- bin
| |
| +--- myapp.dart
|
+---- all other files
Linux
从发布页面下载预构建的Linux二进制文件,并将它们放在根目录下的out
文件夹中。
注意:你需要将这些文件与最终的可执行文件一起分发。
文件结构应如下所示:
myapp
|
+---- out
| |
| +--- webview.so
|
+--- bin
| |
| +--- myapp.dart
|
+---- all other files
MacOS
不幸的是,我没有Mac电脑,请检查构建说明以构建.dylib
文件。完成后,准备与Linux相同的文件结构即可。
文档
在你的myapp.dart
文件中:
import 'package:webview_dart/webview_dart.dart';
void main() {
final url = "https://www.google.com";
Webview(true)
.setTitle("Google")
.setSize(1280, 800, SizeHint.none)
.navigate(url)
.run();
}
运行项目
要运行你的项目,请更改到out
目录并运行Dart文件,如所示:
cd out
dart run ../bin/myapp.dart
API参考
创建窗口
创建一个新的Webview实例。如果debug
为true
,则会启用开发者工具(如果平台支持)。
根据平台不同,可能会使用GtkWindow、NSWindow或HWND。
final webview = new Webview(true);
参数 | 类型 | 描述 |
---|---|---|
debug | bool | 可选。设置是否可以从应用程序访问开发者工具(仅限支持的平台)。 |
导航到URL
导航Webview到给定的URL。URL可以是数据URI,例如"data:text/html,<html>…</html>"。通常不需要正确地进行URL编码,Webview会为你重新编码。
webview.navigate("Your url");
参数 | 类型 | 描述 |
---|---|---|
url | String | 必填。在调用run 方法时立即导航到给定的URL。 |
运行应用
使用给定的设置启动应用。
webview.run();
参数 | 类型 | 描述 |
---|---|---|
autoDestroy | String | 可选。在执行结束时销毁窗口。 |
更改标题
用于更改窗口标题。
webview.setTitle("New Title");
参数 | 类型 | 描述 |
---|---|---|
title | String | 必填。更改窗口的标题。 |
更改大小
更新原生窗口大小。
webview.setSize(400, 600, SizeHint.none);
参数 | 类型 | 描述 |
---|---|---|
width | int | 必填。设置窗口宽度。 |
height | int | 必填。设置窗口高度。 |
sizeHint | SizeHint | 可选。设置窗口大小提示。 |
大小提示
设置窗口调整行为。
SizeHint有以下值:
SizeHint.none
SizeHint.min
SizeHint.max
SizeHint.fixed
值 | 描述 |
---|---|
none | 默认。宽度和高度为默认大小。 |
min | 宽度和高度为最小边界。 |
max | 宽度和高度为最大边界。 |
fixed | 窗口大小不能由用户更改。 |
执行JavaScript
执行任意JavaScript代码。执行是异步的,表达式的结果被忽略。
webview.eval("A valid string of Js");
参数 | 类型 | 描述 |
---|---|---|
js | String | 必填。要执行的JavaScript。 |
初始化逻辑
在新页面初始化时注入JavaScript代码。每次Webview打开新页面时都会执行此初始化代码。保证代码在window.onload
之前执行。
webview.init("A valid string of Js");
参数 | 类型 | 描述 |
---|---|---|
js | String | 必填。要执行的JavaScript。 |
绑定原生函数
绑定一个本地回调,使其作为全局JavaScript函数出现在给定名称下。内部使用webview_init()
。回调接收传递给JavaScript函数的所有参数列表。
webview.bind("jsName", (List<dynamic> args) {
// some code
});
参数 | 类型 | 描述 |
---|---|---|
name | String | 必填。要暴露给JavaScript的函数名称。 |
function | void Function(List<dynamic args>) | 必填。要暴露给JavaScript的函数,args 参数是从JavaScript传递的参数列表。 |
销毁窗口
销毁Webview并关闭原生窗口。
webview.destroy();
终止主循环
停止主循环。
webview.terminate();
示例代码
下面是一个完整的示例demo,展示了如何使用webview_dart
加载Google网站:
import 'package:webview_dart/webview_dart.dart';
void main() async {
final url = "https://www.google.com";
Webview(true)
.setTitle("Google")
.setSize(1280, 800,
SizeHint.none /* Sizehint is optional and can be omitted */)
.navigate(url)
.run();
}
通过上述步骤和API,你可以轻松地在Flutter项目中集成webview_dart
插件,并实现网页视图功能。希望这能帮助你快速上手并开发出所需的应用程序!
更多关于Flutter网页视图插件webview_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网页视图插件webview_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter中的webview_dart
插件的使用,下面是一个基本的示例代码,展示了如何在Flutter应用中嵌入和使用WebView。
首先,确保在你的pubspec.yaml
文件中添加webview_dart
依赖:
dependencies:
flutter:
sdk: flutter
webview_dart: ^0.7.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤创建一个包含WebView的页面。
示例代码
-
创建一个新的Flutter项目(如果你还没有的话),或者在你的现有项目中创建一个新的Dart文件,例如
webview_page.dart
。 -
在
webview_page.dart
中编写以下代码:
import 'package:flutter/material.dart';
import 'package:webview_dart/webview_dart.dart';
class WebViewPage extends StatelessWidget {
final String url;
WebViewPage({required this.url});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('WebView Example'),
),
body: WebView(
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted, // 允许执行JavaScript
onWebViewCreated: (WebViewController webViewController) {
// 你可以在这里保存WebViewController的引用,以便后续调用
print("WebView is created!");
},
onPageStarted: (String url) {
print("Page started loading: $url");
},
onPageFinished: (String url) {
print("Page finished loading: $url");
},
gestureNavigationEnabled: true, // 允许手势导航(如滑动返回)
),
);
}
}
- 在你的主页面(例如
main.dart
)中导航到这个WebView页面:
import 'package:flutter/material.dart';
import 'webview_page.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter WebView Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter WebView Demo Home'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => WebViewPage(url: 'https://flutter.dev')),
);
},
child: Text('Open WebView'),
),
),
);
}
}
解释
- WebViewPage:这是一个包含WebView的页面,它接受一个
url
参数,用于加载指定的网页。 - WebView:这是
webview_dart
插件提供的Widget,用于显示网页内容。initialUrl
:指定初始加载的URL。javascriptMode
:设置为JavascriptMode.unrestricted
以允许执行JavaScript。onWebViewCreated
:当WebView创建完成时回调,可以保存WebViewController
的引用。onPageStarted
和onPageFinished
:分别在页面开始加载和加载完成时回调。gestureNavigationEnabled
:允许使用手势进行页面导航。
运行应用
确保所有代码无误后,运行你的Flutter应用。点击按钮后,应该会打开一个包含Flutter官网的新页面。
这个示例展示了如何使用webview_dart
插件在Flutter应用中嵌入和显示网页内容。你可以根据需要进一步自定义和扩展这个示例。