ClientSocketException(带有 SocketException 的 ClientException:连接失败(操作系统错误:...)

问题描述 投票:0回答:1

我是初学者 flutter 开发人员,我在使用 http 包时遇到问题。 当我运行我的项目时,I click on button I get the error below

我针对此问题的代码是: **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";

感谢您的帮助!

我在使用 http 包时遇到问题。 当我运行我的项目时,I click on button I get the error below

flutter dart http email qr-code
1个回答
0
投票

在 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

然后卸载该应用程序并重新安装。

© www.soinside.com 2019 - 2024. All rights reserved.