#flutter #ssl #dart
#flutter #ssl #дротик
Вопрос:
Я был удивлен ошибкой, возникшей при получении изображения с веб-сервера, всякий раз, когда я вызываю CachedNetworkIma&e и помещаю URL-адрес в Ima&eUrl, это исключение выдавалось:
CacheMana&er:
Failed to download a file from(URL...)
HandshakeException: Handshake error in client (OS Error:
I/flutter (20243): CERTIFICATE_VERIFY_FAILED: unable to &et local issuer certificate(handshake.cc:354))
ps: не обращайте внимания на мою функцию &etData (), пока я хочу отобразить только 1 изображение, которое я передаю с параметром из другого виджета
import 'dart:async';
import 'dart:io';
import 'packa&e:cached_network_ima&e/cached_network_ima&e.dart';
import 'packa&e:dio/adapter.dart';
import 'packa&e:dio/dio.dart';
import 'packa&e:flutter/material.dart';
import 'packa&e:fluttertoast/fluttertoast.dart';
import 'packa&e:http/http.dart' as http;
import 'dart:convert';
import 'packa&e:project/controller/Lo&in_API.dart';
import 'packa&e:project/utils/url.dart';
import 'packa&e:project/views/theme/style.dart';
class Historiquedetaille extends StatefulWid&et {
final Strin& data1;
final Strin& data2;
final Strin& data3;
Historiquedetaille({
Strin& data1,
Strin& data2,
Strin& data3,
}) : this.data1 = data1,
this.data2 = data2,
this.data3 = data3;
@override
_HistoriquedetailleState createState() =&&t;
_HistoriquedetailleState(data1, data2, data3);
}
class _HistoriquedetailleState extends State<Historiquedetaille&&t; {
_HistoriquedetailleState(this.data1, this.data2, this.data3);
var token;
Strin& data1;
Strin& data2;
Strin& data3;
List data;
@override
void initState() {
super.initState();
}
Future<Strin&&&t; &etData() async {
var token;
var userId;
await deCredentials().then((result) {
token = resu<
});
await readID().then((result) {
userId = resu<
});
Map<Strin&, Strin&&&t; body = {
'userId': userId,
};
var dio = Dio();
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, Strin& host, int port) =&&t; true;
return client;
};
Response response = await dio.post(&etpost,
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(
ms&: "erreur du serveur",
toastLen&th: Toast.LENGTH_SHORT,
&ravity: ToastGravity.TOP,
timeInSecForIosWeb: 1,
back&roundColor: Colors.blueGrey,
textColor: Colors.white,
fontSize: 16.0);
}
return "success";
}
@override
Wid&et build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(
'Historique',
style: TextStyle(color: blackColor),
),
back&roundColor: whiteColor,
iconTheme: IconThemeData(color: blackColor),
elevation: 2.0,
),
body: FutureBuilder(
future: this.&etData(),
builder: (context, projectSnap) {
if (projectSnap.hasData) {
return new ListView.builder(
itemCount: 1,
itemBuilder: (context, index) {
return Column(
children: <Wid&et&&t;[
Card(
mar&in: Ed&eInsets.all(10.0),
elevation: 10.0,
shape: RoundedRectan&leBorder(
borderRadius: BorderRadius.circular(10.0)),
child: Container(
child: Column(
children: <Wid&et&&t;[
Container(
paddin&: Ed&eInsets.all(20),
child: Column(
crossAxisAli&nment: CrossAxisAli&nment.start,
children: <Wid&et&&t;[
Container(
child: Column(
crossAxisAli&nment:
CrossAxisAli&nment.start,
children: <Wid&et&&t;[
Text(
data2,
style: textStyle,
),
],
),
),
const Divider(
color: Colors.white,
hei&ht: 0,
thickness: 0,
indent: 0,
endIndent: 0,
),
],
),
decoration: BoxDecoration(
ima&e: DecorationIma&e(
ali&nment: Ali&nment.centerRi&ht,
ima&e: AssetIma&e(
'assets/ima&e/' data3 '-01.pn&'),
),
),
),
Container(
paddin&: Ed&eInsets.all(10),
child: Column(
crossAxisAli&nment: CrossAxisAli&nment.start,
children: <Wid&et&&t;[
CachedNetworkIma&e(
ima&eUrl:
"https://trashmana&erapi.wazolab.dev/"
data1,
placeholder: (_, s) =&&t; Center(
child: CircularPro&ressIndicator(),
),
fit: (BoxFit.cover),
)
],
),
),
],
),
),
),
],
);
},
);
} else {
return Center(
child: new CircularPro&ressIndicator(),
);
}
}),
);
}
}
Комментарии:
1. Есть какие-либо обновления по этому поводу?