[英]FormatException: Unexpected end of input (at character 2) ^ in flutter
I have a form with 6 fields.我有一个包含 6 个字段的表单。 I am trying to send data to server after the button is pressed.按下按钮后,我试图将数据发送到服务器。 But after pressing the button I got error: FormatException: Unexpected end of input (at character 2) ^ .但是按下按钮后出现错误: FormatException: Unexpected end of input (at character 2) ^ 。 There are some number fields and some normal text fields.有一些数字字段和一些普通文本字段。 Do not understand why this error is occurring.不明白为什么会出现这个错误。 Please help.请帮忙。 Thanks in advance.提前致谢。 Here is my dart code:这是我的 dart 代码:
Future<SubmitData> userData(
String uid,
String saleAmount,
String quantity,
String rate,
String brokerName,
String partyName,
String amountReceivable) async {
Map<String, dynamic> map = {
'uid': uid,
'saleAmount': saleAmount,
'quantity': quantity,
'rate': rate,
'brokerName': brokerName,
'partyName': partyName,
'amountReceivable': amountReceivable
};
final http.Response response = await http.post(
'my php page',
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(map),
);
if (response.statusCode == 201 || response.statusCode == 200) {
return SubmitData.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to submit.');
}
}
class SubmitData {
final String type;
SubmitData({this.type});
factory SubmitData.fromJson(Map<String, dynamic> json) {
return SubmitData(type: json['type']);
}
}
class UserForm extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _UserForm();
}
}
class _UserForm extends State<UserForm> {
final _formKey = GlobalKey<FormState>();
final uid = TextEditingController();
final myController = TextEditingController();
final myController2 = TextEditingController();
final myController3 = TextEditingController();
final myController4 = TextEditingController();
final myController5 = TextEditingController();
final myController6 = TextEditingController();
@override
void dispose() {
// Clean up the controller when the widget is disposed.
uid.dispose();
myController.dispose();
myController2.dispose();
myController3.dispose();
myController4.dispose();
myController5.dispose();
myController6.dispose();
super.dispose();
}
Future<SubmitData> _futureSubmitData;
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: (_futureSubmitData == null)
? Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Visibility(
visible: false,
child: TextFormField(
controller: uid,
initialValue: '1',
),
),
TextFormField(
controller: myController,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration:
InputDecoration(hintText: 'Sale amount as per party'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter amount.';
}
return null;
},
),
TextFormField(
controller: myController2,
keyboardType: TextInputType.number,
decoration: InputDecoration(hintText: 'Item quantity'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter quantity.';
}
return null;
},
),
TextFormField(
controller: myController3,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration: InputDecoration(hintText: 'Rate'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter rate.';
}
return null;
},
),
TextFormField(
controller: myController4,
decoration: InputDecoration(hintText: 'Broker name'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter broker name.';
}
return null;
},
),
TextFormField(
controller: myController5,
decoration: InputDecoration(hintText: 'Party name'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter party name.';
}
return null;
},
),
TextFormField(
controller: myController6,
keyboardType: TextInputType.numberWithOptions(decimal: true),
decoration: InputDecoration(
hintText: 'Amount receivable as per party'),
validator: (value) {
if (value.isEmpty) {
return 'Please enter amount.';
}
return null;
},
),
Container(
margin: EdgeInsets.all(10.0),
child: RaisedButton(
color: Colors.purple[400],
textColor: Colors.white,
onPressed: () {
if (_formKey.currentState.validate()) {
setState(() {
_futureSubmitData = userData(
uid.text,
myController.text,
myController2.text,
myController3.text,
myController4.text,
myController5.text,
myController6.text);
});
}
},
child: Text('Submit', style: TextStyle(fontSize: 18.0)),
),
),
],
)
: FutureBuilder<SubmitData>(
future: _futureSubmitData,
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data.type == '1') {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text('Data submitted successfully.'),
);
},
);
return Text('.');
} else {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text(
'Data not submitted. You have already submitted for today.'),
);
},
);
return Text('.');
}
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return Center(child: CircularProgressIndicator());
},
),
);
}
}
Found a solution for this.为此找到了解决方案。 The value was not retrieved from未从中检索值
Visibility(
visible: false,
child: TextFormField(
controller: uid,
initialValue: '1'
),
)
So value of String uid was null and that's why the error occurred.所以 String uid 的值是 null,这就是错误发生的原因。
I had to remove initialValue: '1' and replaced我不得不删除 initialValue: '1' 并更换
final uid = TextEditingController();
with和
final uid = TextEditingController(text: "1");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.