我正在尝试将TextFormField的内容保存为字符串,以便可以将其发送到服务器,但是会收到此错误
The following JSNoSuchMethodError was thrown while handling a gesture:
NoSuchMethodError: invalid member on null: 'save'
我正在使用flutter-web。
serving / POST功能尚未实现,目前仅可用于测试。
class _EditViewState extends State<EditView> {
final int cardId;
final _formKey = GlobalKey<FormState>();
bool _isLoading = false;
var _card = jsonDecode('{}');
var _changedCard = '';
_EditViewState({this.cardId});
// <!--Snip--!>
@override
void initState() {
super.initState();
loadCard();
}
loadCard() async {
setState(() {
_isLoading = true;
});
_card = await read('http://localhost:8000/edit/' + cardId.toString());
_card = jsonDecode(_card);
_card = stripId(_card['content']);
setState(() {
_isLoading = false;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Edit Card')),
body: _isLoading
? CircularProgressIndicator()
: Column(children: [
TextFormField(
key: _formKey,
initialValue: _card,
maxLines: null,
onSaved: (value) {
_changedCard = value;
}),
ElevatedButton(
child: Text('Save Changes'),
onPressed: () {
_formKey.currentState.save();
sendCard(_changedCard, cardId);
Navigator.pop(context);
})
]));
}
}
我也尝试使用文本控制器来代替`_formKey.currentState.save(),但收到错误消息:
Assertion failed
initialValue == null || controller == null
is not true
以下是我的文本控制器解决方案与先前代码的不同之处:
class _EditViewState extends State<EditView> {
// <!--Snip--!>
final controller = TextEditingController();
// <!--Snip--!>
@override
void dispose() {
controller.dispose();
super.dispose();
}
// <!--Snip--!>
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Edit Card')),
body: _isLoading
? CircularProgressIndicator()
: Column(children: [
TextFormField(
key: _formKey,
controller: controller,
initialValue: _card,
maxLines: null,
onSaved: (value) {
_changedCard = value;
}),
ElevatedButton(
child: Text('Save Changes'),
onPressed: () {
// _formKey.currentState.save();
_changedCard = controller.text;
sendCard(_changedCard, cardId);
Navigator.pop(context);
})
]));
}
}
我不确定我做错了什么或如何继续。
答案 0 :(得分:1)
您不得将GlobalKey<FormState>
变量用作TextField
的键。您必须在包装您的Form
的{{1}}小部件中使用它。
TextField