我几天前开始使用颤动和飞镖,到目前为止一切顺利。非常好的工具,但对于应用程序,我需要从网络服务器获取图片,每当我试图用(int, wchar_t*, const wchar_t*)
调用它时,抛出此异常:
HandshakeException: 客户端中的握手错误(操作系统错误:CERTIFICATE_VERIFY_FAILED:无法获取本地颁发者证书(ssl_cert.c:345))。
如果有人能帮助我,请提前致谢。
答案 0 :(得分:6)
跳过ssl认证问题的最佳方法 它可以解决Image.network(url)问题
class MyHttpOverrides extends HttpOverrides{
@override
HttpClient createHttpClient(SecurityContext context){
return super.createHttpClient(context)
..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
}
}
void main(){
HttpOverrides.global = new MyHttpOverrides();
runApp(new MyApp());
}
答案 1 :(得分:0)
您使用的是Windows并使用卡巴斯基防病毒软件吗?我不知道所有的技术细节,但这种防病毒以某种方式影响握手。禁用它应该会有所帮助。 此处提交了类似的问题,但我认为这不是Dart SDK问题:https://github.com/dart-lang/sdk/issues/32131
答案 2 :(得分:0)
这对我来说很好
var image = new Container(
width: 100.0,
height: 100.0,
decoration: new BoxDecoration(
borderRadius: new BorderRadius.circular(3.0),
color: const Color(0xff7c94b6),
image: new DecorationImage(
image: new NetworkImage(
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRwlzVkvBV1EA_w87NFvYAhT-EC2HMRpfTuRFtHE7nXE5GPvnsQ"),
fit: BoxFit.cover,
),
),
);
请检查此answer以添加badCertificateCallback
_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
答案 3 :(得分:0)
我遇到同样的问题!能够解决它的应用程序(这是服务器相关的问题,因此最好在服务器端解决它!) sol:在本地添加用户信任证书!或跳过检查! 我选择添加证书。 将您的证书(针对您的特定域)添加为pubsec.yaml文件中的资产。 (您可以从网络浏览器中收集它)
assets:
- assets/raw/certificate.pem
然后在发出网络请求之前,将以下代码添加到应用程序中的某处。例如,在主要功能中。
void main() async{
await WidgetsFlutterBinding.ensureInitialized();
ByteData data = await
rootBundle.load('assets/raw/certificate.pem');
SecurityContext context = SecurityContext.defaultContext;
context.setTrustedCertificatesBytes(data.buffer.asUint8List());
runApp(MyApp());
}
答案 4 :(得分:-2)
运行flutter upgrade
,问题就会消失。