flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED
最近有个flutter项目中根据搜索结果跳转到相应的H5页面发现老是报错,曾现在闲暇拉出来解决哈
先来看一个搜索功能的测试
已进入详情页面就提示错误,尴尬了。
只有去检测代码了撒
Search.dart
SearchItem item = searchModel.data[position];
print(item.url);
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => WebView(
url: item.url,
title: '详情',
)));
},
检测该处并无问题,于是继续向上查找,找到了Search_model.dart
class SearchModel{
String keyword;
final List<SearchItem> data;
SearchModel({this.data});
factory SearchModel.fromJson(Map<String,dynamic>json){
var dataJson = json['data'] as List;
List<SearchItem> data = dataJson.map((i)=>SearchItem.fromJson(i)).toList();
return SearchModel(data:data);
}
}
确认该处也没问题,那么问题可能是json格式化类SearchItem
class SearchItem
class SearchItem{
final String word; //xx酒店
final String type; //hotel
final String price ; //实时计价
final String star ; //豪华型
final String zonename ; //虹桥
final String districtname ; //上海
final String url ;
SearchItem({this.word, this.type, this.price, this.star, this.zonename,
this.districtname, this.url});
factory SearchItem.fromJson(Map<String,dynamic>json){
return SearchItem(
word: json['word'],
type: json['type'],
price: json['price'],
star: json['star'],
zonename: json['zonename'],
districtname:json['districtname'],
url:json['url']
);
}
Map<String, dynamic> toJson(){
Map<String,dynamic> data = new Map<String,dynamic>();
data['icon'] = this.word;
data['title'] = this.type;
data['price'] = this.price;
data['star'] = this.star;
data['zonename'] = this.zonename;
data['districtname'] = this.districtname;
data['url'] = this.url;
return data;
}
}
打眼看去是否也没什么问题呀,那为是么无法进入详情页面呢,经过再次阅读代码发现toJson方法好像并无用处(这个好像是上次测试
Text(object)渲染对象,需要进行序列化时留下的)
于是果断干掉,再测试(当初断定是这个引起的因为我删除这个方法测试过一次OK了)
但是事实并非想象的那么简单(gradle.properties
和 build.gradle
的dependencies
都改了一遍–抓狂),再次测试依然一样报错
最后一次次找,才发现实从Android 9.0(API级别28)开始,默认情况下禁用明文支持。因此http的url均无法在webview中加载
解决方法:在AndroidManifest.xml
的applaction
节点中添加android:usesCleartextTraffic="true"
即可(害我找了半天)
如:
<application
android:name="io.flutter.app.FlutterApplication"
android:label="flutter_test"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher">
<!-- ... another configure -->
</application>
另外如果是ios 则在 info.plist中增加
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
再测试哈
总算OK了,特此记录,避免再入坑
flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED的更多相关文章
- Android使用WebView加载H5页面播放视频音频,退出后还在播放问题解决
Android中经常会使用到WebView来加载H5的页面,如果H5页面中有音频或者视频的播放时,还没播放完就退出界面,这个时候会发现音频或者视频还在后台播放,这就有点一脸懵逼了,下面是解决方案: 方 ...
- iOS “请在微信客户端打开链接” UIWebview加载H5页面携带session、cookie、User-Agent信息 设置cookie、清除cookie、设置User-Agent
公司新开的一个项目..内容基本上是加载H5页面显示..当时觉得挺简单的..后来发现自己掉坑里了..一些心理历程就不说了..说这个项目主要用到的知识点吧..也是自己踩得坑. 首先说说..这个项目上的内容 ...
- Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果
1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ...
- android中webView加载H5,JS不能调用问题的解决
使用了html5 页面,使用webView加载后发现 超链接的锚点不可以用 为webView设置下面两句就好了: mWebView.getSettings().setDomStorageEnabled ...
- webview加载h5,关闭activity时,窗体泄露问题
问题描述: webview加载一个含有input控件的html页面,当点击input控件是回调app的closepage方法[closepage中只有一个finish操作],出现窗体泄露问题. 分析: ...
- iOS中的webView加载HTML
在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有 ...
- webview加载本地页面
main.xml中布局webview,activity中设置如下 MyWebView=(WebView)findViewById(R.id.webView1); MyWebView.requestFo ...
- 小程序web-view加载H5信息不全
满足小程序的web-view标签跳转网页形式 配置小程序后台的web-view(业务域名) 可打开关联的公众号的文章 通常实现逻辑 页面加载的时候赋值于一个data对象的值,然后赋值到web-view ...
- WebView加载html5页面
mWebView = (WebView) findViewById(R.id.mwebview); mWebView.getSettings().setJavaScriptEnabled(true); ...
- iOS中webView加载URL需要处理特殊字符
今天在项目中遇到webView加载URL时,因为URL中有特殊字符,导致页面无法加载,而且在- (BOOL)webView:(UIWebView )webView shouldStartLoadWit ...
随机推荐
- Windows系统下载最新版Windows10 iso映像
在电脑PC端如何下载最新版的完整Windows10 iso映像?打开https://www.microsoft.com/zh-cn/software-download/windows10/页面,是不能 ...
- Thanos工作原理及组件简介
Thanos 简介 Thanos 是一个「开源的,高可用的 Prometheus 系统,具有长期存储能力」.很多知名公司都在使用 Thanos,也是 CNCF 孵化项目的一部分. Thanos 的一个 ...
- windows下使用pytorch进行单机多卡分布式训练
现在有四张卡,但是部署在windows10系统上,想尝试下在windows上使用单机多卡进行分布式训练,网上找了一圈硬是没找到相关的文章.以下是踩坑过程. 首先,pytorch的版本必须是大于1.7, ...
- data.frame数据框操作——R语言
统计分析中最常见的原始数据形式是类似于数据库表或Excel数据表的形式. 这样形式的数据在R中叫做数据框(data.frame). 数据框类似于一个矩阵,但各列允许有不同类型:数值型向量.因子.字符型 ...
- 京东获得店铺的所有商品API接口(item_search_shop-获得店铺的所有商品)
京东获得店铺的所有商品API接口(item_search_shop-获得店铺的所有商品)接口展示说明及教程: 公共参数 名称 类型 必须 描述key String 是 调用key(必须以GET方式拼接 ...
- Django之数据库操作入门
目录 pycharm连接mysql数据库 pycharm与数据库图形化交互方式 pycharm后台连接数据库 django连接数据库报错 ORM简介 ORM建表 ORM入门之增删改查 ORM写数据 O ...
- 从APNIC获取中国IP地址列表
关于APNIC 全球IP地址块被IANA(Internet Assigned Numbers Authority)分配给全球三大地区性IP地址分配机构,它们分别是: ARIN (American Re ...
- GitLab 安装部署使用
GitLab介绍 GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业.学校等内部网络搭建git私服. 功能:Gitl ...
- internal java compiler error
1.导入Maven项目运行报错: 解决方法:找到File->Settings 修改配置 再次运行就可以了.
- 【Spring5】数据库事务操作
Spring针对事务的操作 事务的概念:事务是数据库最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则都失败. 事务的特性:ACID 原子性.一致性.隔离性.持久性 JavaEE环境三层 ...