【发布时间】:2019-09-25 07:38:15
【问题描述】:
我在页面内有表单,其中包含四个不同的字段和一个按钮。
我有一个奇怪的问题,这就是我正在做的事情:
- 填写表格
- 点击添加按钮
//variables are null - 如果我再次点击添加按钮,我的值是正确的
我想,可能是某些库或代码引起了问题,所以我减少了代码以缩小范围,现在我的代码非常简单,只有一个带有 material.dart 导入包的字段。但问题仍然存在。 :(
我注意到的事情:点击添加按钮总是会返回以前状态的数据而不是当前状态。
示例:
- 填写表格值
1000 - 点击添加按钮
//prints null - 将值更新为
2000 - 点击添加按钮
//prints 1000 - 将值更新为
3000 - 点击添加按钮
//prints 2000 - 等等....
这是完整的代码:
import 'package:flutter/material.dart';
class AddFees extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _AddFees();
}
class _AddFees extends State<AddFees> {
final addFeesFormKey = new GlobalKey<FormState>();
final addFeesScaffoldKey = new GlobalKey<ScaffoldState>();
String _fees;
TextFormField fees;
RaisedButton addFee;
@override
void initState() {
super.initState();
}
void _submit() {
final form = addFeesFormKey.currentState;
if (form.validate()) {
setState(() {
print(_fees);
form.save();
});
}
}
@override
Widget build(BuildContext context) {
fees = TextFormField(
keyboardType: TextInputType.number,
onSaved: (val) => _fees = val,
decoration: InputDecoration(labelText: 'Fees'),
validator: (value) {
if (value.isEmpty) {
return 'Fee cannot be empty';
} else {
return null;
}
},
);
addFee = RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5.0),
),
onPressed: () {
_submit();
},
padding: EdgeInsets.all(12),
color: Colors.redAccent,
child: Text('Add Payment',
style: TextStyle(color: Colors.white, fontSize: 24.0)),
);
return Scaffold(
key: addFeesScaffoldKey,
body: new Form(
key: addFeesFormKey,
child: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.only(left: 24.0, right: 24.0),
children: <Widget>[
SizedBox(
height: 25.0,
),
fees,
SizedBox(
height: 15.0,
),
addFee
])),
),
);
}
}
这是怎么回事?
【问题讨论】:
-
在构建方法中添加 onSaved 方法 _fees = val in setState
-
试过这样
onSaved: (val) => setState(() => _fees = val),但同样的问题。
标签: flutter dart state textfield