Flutter NoSuchMethodError:null:';保存';尝试保存TextFormField时
我试图将TextFormField的内容保存为字符串,以便将其发送到服务器,但收到此错误Flutter NoSuchMethodError:null:';保存';尝试保存TextFormField时,flutter,widget,flutter-web,Flutter,Widget,Flutter Web,我试图将TextFormField的内容保存为字符串,以便将其发送到服务器,但收到此错误 The following JSNoSuchMethodError was thrown while handling a gesture: NoSuchMethodError: invalid member on null: 'save' 我用的是颤振网 代码 服务/发布功能还没有实现,现在它只是用于测试 class _EditViewState extends State<EditView>
The following JSNoSuchMethodError was thrown while handling a gesture:
NoSuchMethodError: invalid member on null: 'save'
我用的是颤振网
代码
服务/发布功能还没有实现,现在它只是用于测试
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);
})
]));
}
}
以下是我的文本控制器解决方案与先前代码的不同之处:
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);
})
]));
}
}
class\u EditViewState扩展状态{
//您不能使用GlobalKey
变量作为TextField
的键。您必须在包装TextField
的表单
小部件中使用它
final_formKey=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:常量文本(“编辑卡”),
正文:_正在加载
?循环压缩机指示器()
:Form(//您可能需要使用表单小部件包装列,并在TextFormField中设置key=\u formKey。为什么设置maxLines:null?为什么不在loadCard()方法的setState中包装_card?
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);
})
]));
}
}