【Android】在 Flutter 中使用 WebView

【Flutter】webview_flutter使用详解 webview_flutter是Flutter官方推出的一款用于Flutter上的webview插件,该插件在 iOS 用的是WKWebView 支持;在 Android 上用的是系统WebView。 阅读详情

前言

考虑一种情况,您希望在您的应用程序上显示您网站上已有的一些内容。该内容可以是一些用户协议页面或一些支付页面或其他东西。因此,您可以通过编写整个页面的逻辑来构建整个页面,然后在您的应用程序中使用它。您可以做的第二件事就是在您的应用程序中显示您网站的内容,然后您就可以开始了。最好的部分是,您无需使用某些浏览器应用程序即可打开该网页。这样,您最终将节省在应用程序中为该页面编写代码的时间。

甚至许多应用程序都在使用此功能。例如,每当您在任何应用程序上执行一些支付操作时,您会注意到一件事,在支付过程中,将加载一个网页,您将在那里进行支付。这样做的好处是我们不需要为移动应用程序再次编写支付代码。由于您正在处理金钱,因此最好显示已经测试过的网页并进行交易,而不是再次编写代码。

因此,为了在您的应用程序中显示某些网页,您可以使用webview_flutter由 Flutter 团队构建的一个名为的插件。在这篇博客中,我们将学习如何使用这个插件来显示一个网页。

该webview_flutter插件提供了一个WebView小部件。在 iOS 上,WebView小部件由 a 支持,WKWebView而在 Android 上,WebView小部件由WebView. 所以,让我们学习如何使用它。

设置项目

创建一个新的 Flutter 项目。名称:flutter_webview_example
以下是项目结构。因此,您可以通过创建所需的文件夹(src)和文件(main.dart、app.dart、webview_container.dart)来设置项目。

添加依赖

要使用webview_flutter,您需要添加它的依赖项。因此,在您的pubspec.yaml文件中,添加以下依赖项:

dependencies:
  webview_flutter: ^0.3.20

注意:添加依赖项时,请提供适当的缩进,否则最终会出错。

现在,通过保存文件(如果您使用的是 VS Code)或按下pub get选项(在 Android Studio 中)安装依赖项来安装依赖项。此外,您可以使用 Flutter 从命令行安装软件包:

$ flutter pub get

iOS 的附加设置

要WebView在 iOS 上使用,请打开Info.plist 文件并在文件的元素中添加以下内容:

<dict>
    ...
    <key>io.flutter.embedded_views_preview</key>
    <string>YES</string>
    ...

现在,我们完成了依赖部分。让我们继续编码部分。

编码部分

打开main.dart文件并添加以下代码:

import 'package:flutter/material.dart';
import 'package:flutter_webview_example/src/app.dart';

void main() => runApp(App());

现在,创建一个名为的新文件夹src,并在此文件夹下创建两个文件app.dart,即webview_container.dart. 该app.dart文件将用于向该文件提供要加载的 URL 和 AppBar 的标题webview_container.dart。该webview_container.dart文件负责添加WebView以在应用程序中显示所需的 URL。

以下是该app.dart文件的代码:

import 'package:flutter/material.dart';
import 'package:flutter_webview_example/src/webview_container.dart';

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WebViewContainer('https://blog.mindorks.com', 'MindOrks'),
    );
  }
}

在这里,我们返回一个MaterialApp并向WebViewContainer类提供 URL 和标题。该webview_container.dart文件的代码是:

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

class WebViewContainer extends StatefulWidget {
  final url;
  final title;
  WebViewContainer(this.url, this.title);
  @override
  createState() => _WebViewContainerState(this.url, this.title);
}

class _WebViewContainerState extends State<WebViewContainer> {
  var _url;
  var _title;
  final _key = UniqueKey();
  _WebViewContainerState(this._url, this._title);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(_title),
      ),
      body: Column(
        children: [
          Expanded(
            child: WebView(
              key: _key,
              javascriptMode: JavascriptMode.unrestricted,
              initialUrl: _url,
            ),
          ),
        ],
      ),
    );
  }
}

在上面的代码中,您可以看到我们正在使用WebView小部件,并且在该小部件内部,我们正在使用initialUrl打开所需的 URL。您还可以javascriptMode使用上面使用的参数在 WebView 中启用或禁用 JavaScript。默认情况下,WebView 中的 JavaScript 被禁用。

除此之外,您可以WebView在WebViewController. WebViewController只要WebView完全构建,就会返回 。因此,通过使用此控制器,您可以执行各种操作,例如加载其他 URL 或获取当前 URL、将 URL 添加到收藏夹等。以下是一个示例 WebViewController:

WebViewController _controller;
WebView(
  initialUrl: 'https://blog.mindorks.com',
  onWebViewCreated: (WebViewController webViewController) {
    _controller = webViewController;
  },
);
//...After some operations:
_controller.loadUrl('https://mindorks.com');

这都是关于WebViews在 Flutter 中使用的。

在 Flutter 中使用 webview_flutter 4.0 | js 交互 通过两个示例介绍了 webview_flutter 4.0 与网页交互的三种方案:拦截 URL,JavaScriptChannel 和 js 注入。 阅读详情

相关推荐

Flutter 与 Android 原生 WebView 对比

我们对 native WebView 和 flutter_webview_plugin 分别进行了网页加载速度、占用内存和 html5 兼容性作了对比,发现 native WebView 占用内存更小,网页加载速度和 html5 的兼容性无明显差异。在实际使用中,由于 flutter_webview_plugin 并不存在于 widget 树中,所以不能在 flutter_webview_plugin 中使用如 snackbars, dialogs…这些通知交互 widget。

2401_89285777的博客 1269

Flutter WebView使用以及分析

Flutter WebView使用以及分析 一、背景 在开发过程中很多时候都需要用WebView展示网页,在android中可以直接使用WebView控件加载网页,iOS也有WKWebView或UIWebView,那么在flutter中如何加载网页? 从以下问题入手: flutter中是否有类似原生的WebView控件? flutter中如何使用WebView加载网页? flutter的WebView如何与js通信的? flutter中WebView是如何实现? 二、Flutter WebView fl

矢的飞跃的专栏 2万+

Flutter(三):实现Flutter代码调用Android原生代码(创建WebView Plugin)

本文实现flutter代码调用Android原生Webview(本文比较长) 1.新建一个Flutter项目 2.在项目根目录下右键new&gt;module&gt;flutter plugin 3.自动生成如下图所示项目结构 其中webview_plugin就是我们新建的WebView插件,名字可以自由命名。 展开webview_plugin文件夹的结构如下: 我们目前只...

很久以前 1万+

安卓10 flutter webview 回退会闪退

在安卓10设备上,访问了webview页面后,回退到其他页面后,大概率会闪退,请查看issuses。解决思路:在回退前,先把webview销毁掉,重新生成一个非webveiw页面后再回退。使用WillPopScope和重写appBar回退函数处理。

pgLi 1395

flutter webview android h5 select组件点击秒退解决方法

flutter webview android h5 select组件点击秒退解决方法 最近公司有项目用flutter+webview的方式开发(我知道这很蠢),其中有好多坑,在这里记录一下。 在这里我用的是flutter官方的webview组件 webview_flutter webview_flutter: ^0.3.13 引入方式如上,pub仓库地址为这个,webview_flutte...

shuai_0034的博客 2146

【Flutter】Flutter 如何使用 WebView

在 Flutter 中使用 WebView 的基本方法,以及如何使用 `webview_flutter` 库。

Code Metaverse 7082

android webview_Flutter性能优化WebView使用姿势

背景 Flutter从诞生到现在,已经成为了跨端开发的领跑者,国内外越来越多的公司走上了flutter探索之路,我们智云大前端团队从2018年就已经开始尝试使用flutter开发少量页面,经过一年时间的技术探索和沉淀,2019年前端组发起了智云健康app的全量flutter化(基于flutter sdk 1.9.0),经过flutter组小伙伴3个月的努力,智云健康app flutter...

weixin_39586649的博客 1211

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2164

flutter使用webview_flutter在安卓和ios上打开网页

要打开非https协议的网页,需要在安卓平台上添加权限:android:usesCleartextTraffic="true"

3128

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1454

minist手写数字的识别代码复现(pytorch 版本)

电脑系统:Windows 10语言环境:Python 3.8.18编译器:jupyter notebook深度学习环境:torch == 1.13.1+cu116显卡及显存: Tesla V100-PCIE-32GB卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种 具有局部连接、权重共享等特性的深层前馈神经网络. 目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的 前馈神经网络。

2202_75521293的博客 2620

Flutter webview 安卓10连接有误

最近在调试flutter_webview功能时,发现在模拟器安卓5.1上是正常的,在真机安卓10上出现ERR_CLEARTEXT_NOT_PERMITTED 连接有问题,经过查找资料,解决问题。 android:usesCleartextTraffic="true" ...

weijia3624的专栏 7463

SRAM compiler中 Number of banks 设置

的值时,需要考虑应用的性能需求、功耗要求和面积限制。设计者应根据具体的应用场景选择合适的bank数量,以优化整体系统性能。bank是一种用于分离存储器访问的设计结构,允许同时对不同的存储区域进行读写操作,从而提高存储器的并发访问性能。选项用于指定 SRAM 存储器的 并发存储区域。在 SRAM 编译器中,

hzmscut的博客 1876

Flutter中使用webview_flutter遇到的https和http混用问题(Android)

Flutter中WebView使用遇到的问题

Mr_Tony的专栏 4282

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3618

什么是 PD 电压诱骗?

电压诱骗” 的意思就是,使用某些方法让 PD 充电器误以为设备需要更高的电压,从而让充电器提供比实际需要更高的电压。手机可能只需要 5V,但笔记本电脑可能需要 20V,通过 PD 协议,充电器能够根据设备的需求输出合适的电压和电流。在“电压诱骗”的情况下,你通过某种手段让充电器以为设备需要 12V,于是充电器会按照这个伪造的请求输出 12V,而不是默认的 5V。充电器评估自己的能力,如果可以提供设备需要的电压和电流,它会调整输出电压,从默认的 5V 切换到设备请求的电压(如 12V)。

qq_45430571的博客 2660

Android使用webview怎么加载uri_Flutter下实现WebView拦截加载离线资源

秦子帅明确目标,每天进步一点点.....作者| 星星y地址|https://www.jianshu.com/p/dae373ca9f0f前言哎,Flutter真香啊在用移动设备加载H5页面时,一些公共资源如css,js,图片等如果比较大时,就需要通过拦截网络,改从本地资源加载。在Android原生WebView中,我们可以在WebViewClient中的shouldInterc...

weixin_39864373的博客 553

Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络

所提出的Mamba-UNet的架构如图2所示,其灵感来源于UNet [24] 和 Swin-UNet [3]。首先将大小为 H × W × 1 的2D灰度图像分割成类似于ViT和VMamba的块 [5,16],然后转换为维度为 H/4 × W/4 × 16 的1D序列。一个初始的线性嵌入层将特征维度调整为任意大小C。这些块令牌随后通过多个VSS块和块合并层进行处理,以创建分层特征。块合并层负责下采样和维度增加,而VSS块则专注于学习特征表示。

AI浩 7551

Flutter 解决webview_flutter 插件Android端无法上传文件问题

最近在使用webview_flutter遇到在内嵌的h5中有上传文件的需求,但是官方的webview_flutter并没有对Android做相关的适配。做过Android的应该知道在Android源生中使用webview内嵌H5需要对上传文件的功能做相关的适配处理,否则会报错。由于webview_flutter内部还是使用Android源生的webview来展示H5,所以如果项目中有这方面需求还是...

倚栏静望的博客 5885

将Dify平台开发的工作流集成到Open WebUI中

将Dify开发的工作流集成到Open WebUI是一个能够显著增强AI应用交互能力和业务逻辑深度的有效途径。其核心在于通过API建立两者间的通信桥梁,并确保API在格式、协议和行为上的一致性,特别是向OpenAI Chat API规范看齐。最简单直接的路径是利用Dify的“对话型”或“Agent型”应用,这类应用的API设计更倾向于满足Open WebUI这类聊天前端的期望。然而,面对复杂的现实场景,直接的完美兼容并非总是唾手可得。

形上得其象,形下合于数;阴阳自济,玄理自明。 2031

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

快速解决Flutter的Webview在安卓上不支持选择图片

今天突然来了一个需求,发现H5写的上传图片,在选择图片的时候,没有反应,只在安卓上没反应。IOS上可以正常选择照片、拍照。不要在这儿耗时间,开发flutter遇到一些问题,是插件不支持的,就果然换另一个插件。我们Flutter用的这个插件,来做的Webview,一直都没什么问题。现在换了 flutter_inappwebview 就都支持了。

王氏秘籍 790

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: Android组件化下的路由框架
下一篇: 在Android应用程序中查找退出的原因
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值