一:问题描述
前段时间在面试,有家公司问是否愿意做一个小的入职测试,想着多个机会多条路,就顺便做了,但项目刚开始运行,就报错了,报错信息如下图所示
【Flutter dio error】DioError [DioErrorType.DEFAULT]:Bad state: Insecure HTTP is not allowed by plat
其中主要关键字是 Bad state: Insecure HTTP is not allowed by platform ,翻译后是说错误的状态,因为平台不允许不安全的 HTTP 请求。
这是在获取用户信息接口中发生的错误,用到了 HTTP 请求,然后查阅了相关资料并尝试后,最终修复了这个问题,需要说明的是,我只在 Android 端进行了配置。
二:解决方案
出现这种情况,是因为 Android 9 对网络请求做了限制,不能直接访问 HTTP 域名的地址,可以通过修改项目的配置文件,允许不加密的请求也可以使用,总共就两步,接下来说下如何配置。
步骤一:
依次按照路径 android/app/src/main/AndroidManifest.xml 找到安卓的清单文件,在 application 标签中添加两个属性
<application
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
>
步骤二:
在 android/app/src/main/res 目录下新建名为 xml 的文件夹,然后在 xml 文件夹下新建 network_security_config.xml 文件,如下图所示
network_security_config.xml 的文件内容为
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
ok