微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NoSuchMethodError:试图保存TextFormField 代码

如何解决NoSuchMethodError:试图保存TextFormField 代码

我正在尝试将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')),controller: controller,onpressed: () {
                      // _formKey.currentState.save();
                      _changedCard = controller.text;
                      sendCard(_changedCard,cardId);
                      Navigator.pop(context);
                    })
              ]));
  }
}

我不确定我做错了什么或如何继续。

解决方法

您不得将GlobalKey<FormState>变量用作TextField的键。您必须在包装您的Form的{​​{1}}小部件中使用它。

TextField

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。