如何正确的在Flutter中添加webview

news/2024/7/7 22:50:48

前言

为什么要在flutter中引入webview?这不是废话么,当然是为了加载一个网页,这不是移动端最基本的需求么,哈哈!说的真不错,接下来我要是告诉你我的用法,你可能要大吃一惊。我的用处很简单,那就是在webview中再加载一个flutter编译成web的项目。有没有吓到你。别怕,我这么做的原因很简单,就是为了热更新。可能在flutter中实现热更新的方法有很多,但我敢说我这么做就是最好的热更新方式。当我内容发生变更是时候,我不需要继续去审核,只需要在服务器中,更新内容,我的热更新就实现了!是不是听着很动心,那就赶紧学起来吧。

安装

在Flutter应用开发中,由于官方并没有提供类似Webview的网页加载组件,所以如果项目中涉及网页加载就需要使用第三方插件库。网上第三方插件库很多,我不推荐,自行百度搜索比较,用法基本雷同,webview_flutter是Flutter官方开发和维护的网页加载插件库。所以今天我讲讲它的使用方法

1.在pubspec.yaml文件中添加依赖脚本(并运行隐式flutter pub get)

dependencies:flutter:sdk: fluttercupertino_icons: ^1.0.2webview_flutter: ^3.0.4 

2.使用

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

class WebviewApp extends StatefulWidget {const WebviewApp({Key? key}) : super(key: key);@overrideState<WebviewApp> createState() => _WebviewAppState();
}

class _WebviewAppState extends State<WebviewApp> {@overridevoid initState() {super.initState();if (Platform.isAndroid) WebView.platform = AndroidWebView();}@overrideWidget build(BuildContext context) {return const WebView(initialUrl: 'https://www.baidu.com',javascriptMode: JavascriptMode.unrestricted,);}
} 

好了,这样我们就成功引入了webview,并在webview中加载了百度首页。你高兴的去运行项目,结果却傻眼了,终端一片红,好了,我来说说爆红的解决方案。

运行项目遇到的问题

One or more plugins require a higher Android SDK version.

  • 解决方案:找到 项目根目录\android\app\build.gradle,修改如下配置:
android {compileSdkVersion 32
} 

Error: uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library

  • 解决方案:找到 项目根目录\android\app\build.gradle,修改如下配置:
defaultConfig {applicationId "com.example.flutter_jsbridge_js"minSdkVersion 20targetSdkVersion 30versionCode flutterVersionCode.toInteger()versionName flutterVersionName
} 

net:ERR_CLEARTEXT_NOT_PERMITTED

这时候运行项目已经已经不会报错了,但是webview却显示一串神奇代码:net:ERR_CLEARTEXT_NOT_PERMITTED,这是因为从 Android 9(API 级别 28)开始,明文支持默认处于禁用状态。

  • 解决方案:

1.创建文件:/xml/network_security_config.xml

目录路径:“项目根目录/android/app/main/res”

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><domain-config cleartextTrafficPermitted="true"><domain includeSubdomains="true">api.example.com(to be adjusted)</domain></domain-config>
</network-security-config> 

2.对AndroidManifest.xml文件做修改:

<?xml version="1.0" encoding="utf-8"?>
<manifest ...><uses-permission android:name="android.permission.INTERNET" /><application...android:networkSecurityConfig="@xml/network_security_config"...>...</application>
</manifest> 

这时候再去运行项目,就可以正常运行了,画面显示正常,如果你还需要遇到其他问题,可以留言一起解决。

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享


http://lihuaxi.xjx100.cn/news/894107.html

相关文章

Java实现调用ChatGPT的相关接口(附详细思路)

目录1.0.简单版2.0.升级版2-1.call.timeout()怎么传入新的超时值2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思&#xff0c;具体含义3.0.进阶版3-1.java.net.SocketTimeoutException: 超时如何解决4.0.终极版1.0.简单版 以下是一个使用 Java 实际请求 ChatGPT 的简单示例代…

【DockerCE】Docker-CE 23.0.1正式版发布

很意外啊&#xff01;Docker社区版竟然直接从20.xx.xx版本&#xff0c;升级到23.xx.xx版本了。官网地址&#xff08;For RHEL/CentOS 7.9&#xff09;&#xff1a;https://download.docker.com/linux/centos/7/x86_64/stable/Packages/23.0.1版本官方安装包如下&#xff1a;# l…

基于ArgoCD实现k8s环境下的持续部署

什么是 argo CD Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Argo CD是一个基于Kubernetes的声明式的GitOps工具。 这里我们引入了一个新的概念&#xff0c; 什么是GitOps GitOps是以Git为基础&#xff0c;使用CI/CD来更新运行在云原生环境…

【电商】订单拆单的流程中,系统需要做哪些工作?

什么是拆单&#xff1f; 在网上购买商品下单成功后&#xff0c;过一段时间再次浏览时&#xff0c;有时会发现你的订单会变成两个或多个&#xff0c;这就是系统做了拆单而导致的。 拆单&#xff0c;就是将一个大的订单依据某些规则的集合&#xff0c;将其分解成两个或多个子订…

【动画图解】这个值取对了,ViewPager2才能纵享丝滑

前言 在前两篇文章中&#xff0c;我们通过一张张清晰明了的「示意图」&#xff0c;详细地复盘了RecyclerView「缓存复用机制」与「预拉取机制」的工作流程&#xff0c;这种「图解」创作形式也得到了来自不同平台读者们的一致认可。 而从本文开始&#xff0c;我们将正式进入Vi…

simple-git-hook一个轻量的git钩子库-官方文档翻译

simple-git-hooks 一个让您轻松管理git钩子的工具 零依赖极少的配置&#xff08;仅为package.json中的1个对象&#xff09;轻量 用法 添加simple-git-hooks到项目中 安装simple-git-hooks作为开发依赖项&#xff1a; npm install simple-git-hooks --save-dev添加simple-gi…

【Python数学建模常用算法代码(八)之多目标模糊综合评价模型】

代码有注释&#xff0c;请先搞清楚什么叫多目标模糊综合评价模型。再来套公式&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; def frequency(matrix,p):频数统计法确定权重:param matrix: 因素矩阵:param p: 分组数:retu…

【Airplay_BCT】关于Bonjour的概念解答

1.什么是Bonjour&#xff1f; Bonjour&#xff0c;也称为零配置网络&#xff0c;可以自动发现 IP 网络上的计算机、设备和服务。 Bonjour 使用行业标准 IP 协议&#xff0c;允许设备自动发现彼此&#xff0c;无需输入 IP 地址或配置 DNS 服务器。具体来说&#xff0c;Bonjour …