【问题标题】:The method 'dispose' was called on null in Flutter在 Flutter 中,方法 'dispose' 被调用为 null
【发布时间】:2020-12-24 07:01:09
【问题描述】:

我想在flutter中做应用程序,为了使用focusNode我写了这段代码->

FocusNode _titleFocus;
FocusNode _descriptionFocus;
FocusNode _todoFocus;


@override
void initState() {
  // TODO: implement initState
super.initState();
if(widget.task!=null){

  _titleFocus = FocusNode();
  _descriptionFocus = FocusNode();
  _todoFocus = FocusNode();

  }
}

 @override
 void dispose() {
 // TODO: implement dispose
  _titleFocus.dispose();
  _descriptionFocus.dispose();
  _todoFocus.dispose();
  super.dispose();
}

我首先在代码下方启动 FocusNode,这个 focusNode 在退出 todo 任务对象时可以正常工作,但是当我想创建新的并将焦点传递给另一个时,它不起作用。我使用此代码传递焦点...

focusNode: _titleFocus,
_descriptionFocus.requestFocus();

但它出错并显示消息 ->

The following NoSuchMethodError was thrown while finalizing the widget tree:
The method 'dispose' was called on null.
Receiver: null
Tried calling: dispose()

【问题讨论】:

    标签: android flutter widget focus dispose


    【解决方案1】:

    “当我想创建一个新的并将焦点传递给另一个时,它不起作用。”

    由于initState 方法中的条件,FocusNode 没有被实例化。因此出现错误 (The method 'dispose' was called on null.)。

    要解决此问题,您可以在dispose 方法中的FocusNodes 上调用dispose() 之前检查条件。


     @override
     void dispose() {
     // TODO: implement dispose
    if(widget.task!=null){ // check whether it is an existing todo or a new one before calling dispose
    _titleFocus.dispose();
      _descriptionFocus.dispose();
      _todoFocus.dispose();
    }
      super.dispose();
    }
    

    更新:您可以使用?. 表示的null aware operator,而不是IF 检查:

    在下面添加了一个示例:

     @override
     void dispose() {
     // TODO: implement dispose
      _titleFocus?.dispose();
      _descriptionFocus?.dispose();
      _todoFocus?.dispose();
    }
      super.dispose();
    }
    

    【讨论】:

    • 代替 if 检查,您可以在 dispose 中的每个焦点节点上使用 null 感知运算符,即。 ?.dispose()
    • 感谢您的提示,更新了答案以指定null aware operator => 可以使用?. 代替if 检查。
    • 如果我的回答帮助您解决了您原始帖子中指定的问题,请接受并投票。 @sazinsamin
    猜你喜欢
    • 2020-07-21
    • 2021-07-29
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2020-04-09
    • 2020-08-01
    • 2020-06-12
    相关资源
    最近更新 更多