在使用http、dio访问http网络链接时,Flutter会报出StateError (Bad state: Insecure HTTP is not allowed by platform: http://xxxx.xxxx.xxx)错误,这是因为IOS 和 Android 9.0 对网络请求做了一些限制,不能直接访问 Http 域名的地址。
解决办法
1.Android解决办法
为 android 的清单文件 AndroidManifest.xml设置usesCleartextTraffic属性为False。
1.配置network_security_config.xml
添加或修改android/app/src/main/res/xml/network_security_config.xml
增加usesCleartextTraffic节内容
<?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>
2.配置AndroidManifest.xml
修改android/app/src/main/AndroidManifest.xml文件,application元素增加属性android:networkSecurityConfig="@xml/network_security_config"
重启程序运行
1.IOS解决办法
ios/Runner/Info.plist,添加关于 NSAppTransportSecurity NSAllowsArbitraryLoads 的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>