FormatException:输入意外结束(在字符2处)^

时间:2020-09-01 14:41:25

标签: flutter dart

我有一个包含6个字段的表格。我试图在按下按钮后将数据发送到服务器。但是按下按钮后出现错误: FormatException:输入的意外结束(在字符2)^ 。有一些数字字段和一些普通的文本字段。不明白为什么会发生此错误。请帮忙。提前致谢。这是我的飞镖代码:

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());
          },
        ),
     );
    }
  }

1 个答案:

答案 0 :(得分:0)

为此找到了解决方案。该值未从

中检索
Visibility(
 visible: false,
 child: TextFormField(
  controller: uid,
  initialValue: '1'
 ),
)

所以String uid的值为null,这就是发生错误的原因。

我必须删除initialValue:'1'并替换

 final uid = TextEditingController();

使用

 final uid = TextEditingController(text: "1");