我是初学者 flutter 开发人员,我在使用 http 包时遇到问题。 当我运行我的项目时,
我针对此问题的代码是: **qrCodeController.dart 文件 **
import 'package:front_paye_ton_kawa/config/constants/ipadress.dart';
import 'package:http/http.dart' as http;
class QRCodeController {
Future<String> getQRCode(String email) async {
String urlString = '$ipaddress/api/v1/qrCode?email=$email';
http.Response response = await http.get(Uri.parse(urlString));
if (response.statusCode == 200) {
// La requête a réussi, vous pouvez traiter la réponse ici
String responseBody = response.body;
return responseBody;
} else {
// La requête a échoué avec un code de statut autre que 200
print('Échec de la requête : ${response.statusCode}');
return "null";
}
}
}
**layoutLogin.dart 文件 **
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:front_paye_ton_kawa/config/constants/color_theme.dart';
import 'package:front_paye_ton_kawa/controllers/qrCodeController.dart';
import 'package:front_paye_ton_kawa/modules/connexion/components/button.dart';
import 'package:front_paye_ton_kawa/modules/connexion/components/textInput.dart';
import 'package:front_paye_ton_kawa/modules/connexion/views/indexQR.dart';
import 'package:front_paye_ton_kawa/utils/provider.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class LayoutLogin extends HookConsumerWidget {
const LayoutLogin({
super.key,
required this.formKey,
});
final formKey;
@override
Widget build(BuildContext context, WidgetRef ref) {
final mailController = TextEditingController();
return Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column(
children: [
Text(
"Email",
style: Theme.of(context)
.textTheme
.displayMedium
?.copyWith(color: AppColor.primary80, fontSize: 25),
textAlign: TextAlign.center,
),
const SizedBox(
height: 50,
),
Form(
key: formKey,
child: Column(
children: [
TextInput(
icon: FontAwesomeIcons.envelope,
label: "Veuillez renseigner votre email",
placeholder: "Entre ton email",
validator: (value) {
if (value == null || value.isEmpty) {
return 'Veuillez saisir votre adresse e-mail';
}
final emailRegex =
RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
if (!emailRegex.hasMatch(value)) {
return 'Veuillez saisir une adresse e-mail valide';
}
return null;
},
controller: mailController,
),
const SizedBox(
height: 30,
),
],
),
),
const SizedBox(
height: 20,
),
DefaultButton(
color: AppColor.primary80,
text: "Envoyer",
onPressed: () {
if (formKey.currentState!.validate()) {
QRCodeController qrCodeController = QRCodeController();
String email = ref.watch(inputValueProvider);
email = email.replaceAll('@', '%40');
qrCodeController.getQRCode(email).then((qrCodeData) {
if (qrCodeData != "") {
Future.delayed(const Duration(milliseconds: 1000), () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const IndexQR()),
);
});
} else {
// La requête a échoué
print('La requête a échoué.');
}
});
}
},
),
],
),
),
],
);
}
}
ipadress.dart 文件
const ipaddress = "http://192.168.1.67:8080";
感谢您的帮助!
在 Flutter 中,您提供的 MyHttpOverrides 类用于覆盖 HTTP 客户端的默认行为,允许您自定义处理 HTTP 请求的方式,包括如何验证 SSL 证书。当您需要使用自签名 SSL 证书或当您出于开发或测试目的而想要忽略 SSL 证书验证时,这尤其有用。
在您的项目中添加此类,
class MyHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}
然后在你的 main 方法中添加这一行。
HttpOverrides.global = MyHttpOverrides();
在AndroidManifest中添加这两个使用权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在终端上运行此命令
flutter clean
flutter pub get
然后卸载该应用程序并重新安装。