Flutter网页视图插件webview_dart的使用

发布于 1周前 作者 eggper 来自 Flutter

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实例。如果debugtrue,则会启用开发者工具(如果平台支持)。 根据平台不同,可能会使用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

1 回复

更多关于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的页面。

示例代码

  1. 创建一个新的Flutter项目(如果你还没有的话),或者在你的现有项目中创建一个新的Dart文件,例如webview_page.dart

  2. 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, // 允许手势导航(如滑动返回)
      ),
    );
  }
}
  1. 在你的主页面(例如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的引用。
    • onPageStartedonPageFinished:分别在页面开始加载和加载完成时回调。
    • gestureNavigationEnabled:允许使用手势进行页面导航。

运行应用

确保所有代码无误后,运行你的Flutter应用。点击按钮后,应该会打开一个包含Flutter官网的新页面。

这个示例展示了如何使用webview_dart插件在Flutter应用中嵌入和显示网页内容。你可以根据需要进一步自定义和扩展这个示例。

回到顶部