如何使用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
并将 home
从 MyHomePage
更改为 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
插件
下一步将创建一个名为 MyWebView
的 StatelessWidget
来显示 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 主题页面 以获取练习和编程项目。