postman 未行程的例外状况:握手异常:握手期间连接终止

vohkndzv  于 2022-11-07  发布在  Postman
关注(0)|答案(3)|浏览(190)

enter image description here我是flutter的新手。我连接到本地API。我收到连接终止错误

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';

class Registration extends StatefulWidget {
  const Registration({Key? key}) : super(key: key);

  @override
  State<Registration> createState() => _RegistrationState();
}
class _RegistrationState extends State<Registration> {
  TextEditingController _first_controller = TextEditingController();
  TextEditingController _last_controller = TextEditingController();
  TextEditingController _address_controller = TextEditingController();
  TextEditingController _email_controller = TextEditingController();
  TextEditingController _phone_controller = TextEditingController();
  TextEditingController _gender_controller = TextEditingController();
  TextEditingController _password_controller = TextEditingController();
  final GlobalKey<FormState> _formkey = GlobalKey<FormState>();
  @override

小部件构建(BuildContext上下文){返回Scaffold(背景色:颜色:白色,调整大小以避免底部插入:假,

appBar: AppBar(
        centerTitle: true,
        title: Text('Registration',
            style: TextStyle(
                fontSize: MediaQuery.of(context).size.width / 12,
                fontWeight: FontWeight.normal,
                fontStyle: FontStyle.italic,
                color: Colors.white)),
      ),
 body: SafeArea(
          child: SingleChildScrollView(
        child: Form(
          key: _formkey,
          child: Container(
            height: MediaQuery.of(context).size.height / 1,
            child: Column(
              children: [
                Align(
                  alignment: Alignment.center,
                  child: Padding(
                    padding:
                        EdgeInsets.all(MediaQuery.of(context).size.width / 12),
                    child: Column(
                      children: [
                        TextFormField(
                          textInputAction: TextInputAction.next,
                          controller: _first_controller,
                          keyboardType: TextInputType.name,

装饰:输入装饰(标签文本:'名字',标签样式:文本样式(字体大小:媒体查询.(上下文).大小.宽度/ 22),边框:const大纲输入边框(),后缀图标:const图标(Icons.person_add_alt_1_outlineed),),验证器:(值){如果(值==空||value ==“”){ return“请输入名字“;} else {返回空值;} },),大小框(高度:媒体查询.of(context).size.height / 50,),文本表单字段(文本输入操作:TextInputAction.next,控制器:最后一个控制器,键盘类型:TextInputType.name,装修:输入装饰(标签文本:'姓氏',标签样式:文本样式(字体大小:媒体查询.(上下文).大小.宽度/ 22),边框:const大纲输入边框(),后缀图标:const图标(Icons.person_add_alt_1_outlineed),),验证器:(值){如果(值==空||value ==“”){ return“请输入姓氏“;} else {返回空值;} },),大小框(高度:媒体查询.of(context).size.height / 50,),文本表单字段(文本输入操作:TextInputAction.next,控制器:_地址_控制器,键盘类型:TextInputType.街道地址,装饰:输入装饰(标签文本:'地址',标签样式:文本样式(字体大小:媒体查询.(上下文).大小.宽度/ 22),边框:const大纲输入边框(),后缀图标:const图标(图标.位置_城市_轮廓),),验证器:(值){如果(值==空||value ==“”){ return“请输入地址“;} else {返回空值;} },),大小框(高度:媒体查询.of(context).size.height / 50,),文本表单字段(文本输入操作:TextInputAction.next,控制器:_电话_控制器,键盘类型:TextInputType.数字,装饰:输入装饰(标签文本:'电话号码',labelStyle:文本样式(字体大小:媒体查询.(上下文).大小.宽度/ 22),边框:const大纲输入边框(),后缀图标:const图标(Icons.mobile_friendly_outlined),),验证程序:(值){如果(值==空||值==“”||value.length〈8){ return“请输入有效的移动的号码“;} else {返回空值;} },),大小框(高度:媒体查询.of(context).size.height / 50,),文本表单字段(文本输入操作:TextInputAction.next,控制器:_email_控制器,键盘类型:文本输入类型.电子邮件地址,修饰:输入装饰(标签文本:'电子邮件',标签样式:文本样式(字体大小:媒体查询.(上下文).大小.宽度/ 22),边框:const大纲输入边框(),后缀图标:const图标(Icons.email_outlineed),),验证程序:(值){如果(值==空||value ==“”){ return“请输入邮箱“;} else {返回空值;} },),大小框(高度:媒体查询。(上下文)。大小。高度/ 50,),

TextFormField(
                          textInputAction: TextInputAction.next,
                          controller: _gender_controller,
                          keyboardType: TextInputType.text,
                          decoration: InputDecoration(
                            labelText: 'Gender',
                            helperText: 'Choice M or F',
                            labelStyle: TextStyle(
                                fontSize:
                                    MediaQuery.of(context).size.width / 22),
                            border: const OutlineInputBorder(),
                            suffixIcon: const Icon(Icons.male_outlined),
                          ),
                          validator: (value) {
                            if (value == null || value == "") {
                              return "Please Enter Gender";
                            } else {
                              return null;
                            }
                          },
                        ),
                        SizedBox(
                          height: MediaQuery.of(context).size.height / 50,
                        ),
TextFormField(
                          textInputAction: TextInputAction.done,
                          controller: _password_controller,
                          keyboardType: TextInputType.visiblePassword,
                          decoration: InputDecoration(
                            labelText: 'Password',
                            helperText: 'Minimum strength = 3',
                            labelStyle: TextStyle(
                                fontSize:
                                    MediaQuery.of(context).size.width / 22),
                            border: const OutlineInputBorder(),
                            suffixIcon: const Icon(Icons.visibility),
                          ),
                          validator: (value) {
                            if (value == null ||
                                value == "" ||
                                value.length < 3) {
                              return "Please Enter Valid Password";
                            } else {
                              return null;
                            }
                          },
                        ),
                        SizedBox(
                          height: MediaQuery.of(context).size.height / 50,
                        ),
                        ElevatedButton(
                          onPressed: () {
                            RegisterData();
                          },
                          child: Text(
                            'Register',
                            style: TextStyle(
                                fontSize:
                                    MediaQuery.of(context).size.width / 22,
                                fontStyle: FontStyle.italic,
                                letterSpacing:
                                    MediaQuery.of(context).size.width / 209),
                          ),
                        )
                      ],
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      )),
    );
  }
 Future RegisterData() async {
    var url = "https://192.168.2.109:8085/Users";

    Map data = {
      'firstName': _first_controller.text,
      'lastName': _last_controller.text,
      'address': _address_controller.text,
      'phonenumber': _phone_controller.text,
      'email': _email_controller.text,
      'gender': _gender_controller.text,
      'password': _password_controller.text,
    };
    print("JSON DATA: $data");
    http.Response response = await http.post(Uri.parse(url), body: data);

    var mssg_data = jsonDecode(response.body);
    print("DATA: $mssg_data");
  }

}

neskvpey

neskvpey1#

每当我在我的设备或模拟器上手动切换日期并忘记放回时,我都会收到握手异常。我不知道这是否是您的问题,但给予一下,检查您的日期是否正确。有时在模拟器中,它需要删除并重新创建它才能正常运行。

mv1qrgav

mv1qrgav2#

当应用的http客户端在调用Rest Service之前拒绝调用时,您会收到握手异常。默认情况下,flutter的http客户端会拒绝尝试与安全证书过期或未经验证的服务通信的调用。
您可以使用以下代码示例覆盖默认http客户端,并使其向具有无效证书的rest服务发送请求:

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(MyApp());
}

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}

另外,如果问题仍然存在,我们需要进一步调查。如果您使用模拟器,应用可能无法与您的本地服务器通信,如果是这样,您可以通过以下线程解决问题:How do you connect localhost in the Android emulator?

hfwmuf9z

hfwmuf9z3#

我只是随机弹出了这个错误消息。之前一切正常.... a.要解决这个问题,需要从HTTPS API调用更改/切换到HTTP API调用... a a.幸运的是,客户端也提供了HTTP连接. a....希望这对您有所帮助:)

相关问题