如何使用WebView插件在Flutter中嵌入网页

来自菜鸟教程
跳转至:导航、​搜索

介绍

WebView 插件 允许您在 Flutter 应用程序中显示网页。

在本教程中,您将创建一个可在整个应用程序中使用的自定义 Widget,以便从任何地方启动 WebView

先决条件

要完成本教程,您需要:

  • 下载并安装 Flutter
  • 下载并安装Android Studio Visual Studio Code
  • 建议为您的代码编辑器安装插件: 为 Android Studio 安装了 Flutter 和 Dart 插件。 为 Visual Studio Code 安装了 Flutter 扩展。

本教程已使用 Flutter v1.22.2、Android SDK v30.0.2 和 Android Studio v4.1 进行了验证。

第 1 步 — 设置项目

为 Flutter 设置好环境后,您可以运行以下命令来创建新应用程序:

flutter create flutter_webview_example

导航到新的项目目录:

cd flutter_webview_example

使用 flutter create 将生成一个演示应用程序,该应用程序将显示按钮被单击的次数。

在代码编辑器中打开 pubspec.yaml 并添加以下插件:

发布规范.yaml

dependencies:
  flutter:
    sdk: flutter

  webview_flutter: ^1.0.5

完成此设置后,您可以创建将触发和显示 WebView 的小部件。

第 2 步——搭建项目的脚手架

接下来,您需要更新 main.dart 文件并创建一个新的 home_page.dart 文件。

在代码编辑器中打开 main.dart 并导入 home_page.dart 并将 homeMyHomePage 更改为 HomePage

lib/main.dart

import 'package:flutter/material.dart';
import 'home_page.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: HomePage(),
    );
  }
}

然后,创建一个新的 home_page.dart 文件并添加以下代码:

lib/home_page.dart

import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Home Page"),
      ),
      body: Center(
        child: FlatButton(
          child: Text("Open Webpage"),
          onPressed: () {},
        ),
      ),
    );
  }
}

编译您的代码并让它在模拟器中运行。 此代码将创建带有消息 "Open Webpage"FlatButton

第 3 步 — 使用 WebView 插件

下一步将创建一个名为 MyWebViewStatelessWidget 来显示 WebView 数据。

创建一个新的my_webview.dart文件并添加以下代码:

lib/my_webview.dart

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class MyWebView extends StatelessWidget {
  final String title;
  final String selectedUrl;

  final Completer<WebViewController> _controller = Completer<WebViewController>();

  MyWebView({
    @required this.title,
    @required this.selectedUrl,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: WebView(
        initialUrl: selectedUrl,
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller.complete(webViewController);
        },
      ));
  }
}

对于本教程,您会将用户导航到 https://www.digitalocean.com/。 在 selectedUrl 设置为 "https://www.digitalocean.com/%22 的情况下使用 Navigator.push

重新访问 home_page.dart 并添加 MyWebView

lib/home_page.dart

import 'package:flutter/material.dart';
import my_webview.dart;

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Home Page"),
      ),
      body: Center(
        child: FlatButton(
          child: Text("Open Webpage"),
          onPressed: () {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (BuildContext context) => MyWebView(
                title: "DigitalOcean",
                selectedUrl: "https://www.digitalocean.com",
              )
            ));
          },
        ),
      ),
    );
  }
}

编译你的代码并让它在模拟器中运行:

Open Webpage 按钮交互后,您将看到 DigitalOcean 网站显示在您的 Flutter 应用程序中。

结论

在本教程中,您使用 WebView 包在 Flutter 应用程序中显示网页。

如果您想了解有关 Flutter 的更多信息,请查看 我们的 Flutter 主题页面 以获取练习和编程项目。