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");
}
}
3条答案
按热度按时间neskvpey1#
每当我在我的设备或模拟器上手动切换日期并忘记放回时,我都会收到握手异常。我不知道这是否是您的问题,但给予一下,检查您的日期是否正确。有时在模拟器中,它需要删除并重新创建它才能正常运行。
mv1qrgav2#
当应用的http客户端在调用Rest Service之前拒绝调用时,您会收到握手异常。默认情况下,flutter的http客户端会拒绝尝试与安全证书过期或未经验证的服务通信的调用。
您可以使用以下代码示例覆盖默认http客户端,并使其向具有无效证书的rest服务发送请求:
另外,如果问题仍然存在,我们需要进一步调查。如果您使用模拟器,应用可能无法与您的本地服务器通信,如果是这样,您可以通过以下线程解决问题:How do you connect localhost in the Android emulator?
hfwmuf9z3#
我只是随机弹出了这个错误消息。之前一切正常.... a.要解决这个问题,需要从HTTPS API调用更改/切换到HTTP API调用... a a.幸运的是,客户端也提供了HTTP连接. a....希望这对您有所帮助:)