CachedNetworkImage ..引发HandshakeException(CERTIFICATE_VERIFY_FAILED)

时间:2020-08-11 00:04:38

标签: flutter ssl dart

每当我调用CachedNetworkImage并将URL放入imageUrl时,都会从Web服务器获取图片时出现的错误使我感到惊讶,

CacheManager: 
Failed to download a file from(URL...)
HandshakeException: Handshake error in client (OS Error: 
I/flutter (20243):      CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:354))

ps:暂时不要介意我的getData函数(),我只想显示一张图像,该图像与另一个小部件的参数一起传递

import 'dart:async';
import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:dio/adapter.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:project/controller/Login_API.dart';
import 'package:project/utils/url.dart';
import 'package:project/views/theme/style.dart';

class Historiquedetaille extends StatefulWidget {
  final String data1;
  final String data2;
  final String data3;
  Historiquedetaille({
    String data1,
    String data2,
    String data3,
  })  : this.data1 = data1,
        this.data2 = data2,
        this.data3 = data3;

  @override
  _HistoriquedetailleState createState() =>
      _HistoriquedetailleState(data1, data2, data3);
}

class _HistoriquedetailleState extends State<Historiquedetaille> {
  _HistoriquedetailleState(this.data1, this.data2, this.data3);
  var token;
  String data1;
  String data2;
  String data3;
  List data;

  @override
  void initState() {
    super.initState();
  }

  Future<String> getData() async {
    var token;
    var userId;
    await deCredentials().then((result) {
      token = result;
      
    });
    await readID().then((result) {
      userId = result;
    });
    Map<String, String> body = {
      'userId': userId,
  
    };
   
    var dio = Dio();
    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
        (HttpClient client) {
      client.badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
      return client;
    };
    Response response = await dio.post(getpost,
        data: body,
        options: Options(headers: {
          "Authorization": token,
        }));
    final int statusCode = response.statusCode;
    if (statusCode == 200) {
      var responseBody = response.data;
 
      setState(() {
        data = responseBody;
      });
    } else {
      Fluttertoast.showToast(
          msg: "erreur du serveur",
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.TOP,
          timeInSecForIosWeb: 1,
          backgroundColor: Colors.blueGrey,
          textColor: Colors.white,
          fontSize: 16.0);
    }
    return "success";
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text(
          'Historique',
          style: TextStyle(color: blackColor),
        ),
        backgroundColor: whiteColor,
        iconTheme: IconThemeData(color: blackColor),
        elevation: 2.0,
      ),
      body: FutureBuilder(
          future: this.getData(),
          builder: (context, projectSnap) {
            if (projectSnap.hasData) {
              return new ListView.builder(
                itemCount: 1,
                itemBuilder: (context, index) {
                  return Column(
                    children: <Widget>[
                      Card(
                        margin: EdgeInsets.all(10.0),
                        elevation: 10.0,
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(10.0)),
                        child: Container(
                          child: Column(
                            children: <Widget>[
                              Container(
                                padding: EdgeInsets.all(20),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    Container(
                                      child: Column(
                                        crossAxisAlignment:
                                            CrossAxisAlignment.start,
                                        children: <Widget>[
                                          Text(
                                            data2,
                                            style: textStyle,
                                          ),
                                        ],
                                      ),
                                    ),
                                    const Divider(
                                      color: Colors.white,
                                      height: 0,
                                      thickness: 0,
                                      indent: 0,
                                      endIndent: 0,
                                    ),
                                  ],
                                ),
                                decoration: BoxDecoration(
                                  image: DecorationImage(
                                    alignment: Alignment.centerRight,
                                    image: AssetImage(
                                        'assets/image/' + data3 + '-01.png'),
                                  ),
                                ),
                              ),
                              Container(
                                padding: EdgeInsets.all(10),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: <Widget>[
                                    CachedNetworkImage(
                                      imageUrl:
                                          "https://trashmanagerapi.wazolab.dev/" +
                                              data1,
                                      placeholder: (_, s) => Center(
                                        child: CircularProgressIndicator(),
                                      ),
                                      fit: (BoxFit.cover),
                                    )
                                  ],
                                ),
                                
                              ),
                            ],
                          ),
                        ),
                      ),
                    ],
                  );
                },
              );
            } else {
              return Center(
                child: new CircularProgressIndicator(),
              );
            }
          }),
    );
  }
}

0 个答案:

没有答案