Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 方法';处置';在颤振中被调用为空_Android_Flutter_Widget_Focus_Dispose - Fatal编程技术网

Android 方法';处置';在颤振中被调用为空

Android 方法';处置';在颤振中被调用为空,android,flutter,widget,focus,dispose,Android,Flutter,Widget,Focus,Dispose,我想在Flatter中创建一个待办应用程序,为了使用focusNode,我编写了以下代码-> FocusNode _titleFocus; FocusNode _descriptionFocus; FocusNode _todoFocus; @override void initState() { // TODO: implement initState super.initState(); if(widget.task!=null){ _titleFocus = FocusNod

我想在Flatter中创建一个待办应用程序,为了使用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()
“当我想创建一个新的焦点并将焦点传递给另一个焦点时,它不起作用。”

由于
initState
方法中的条件,无法实例化
FocusNode
。因此出现了错误(
方法'dispose'在null上被调用。

要修复此问题,可以在调用
dispose
方法中的
FocusNode
s上的
dispose()
之前检查条件


更新:您可以使用
表示的
空感知运算符,而不是
IF
检查。

在下面添加了一个示例:

@覆盖
无效处置(){
//TODO:实现dispose
_titleFocus?.dispose();
_descriptionFocus?.dispose();
_todoFocus?.dispose();
}
super.dispose();
}
“当我想创建一个新的焦点并将焦点传递给另一个焦点时,它不起作用。”

由于
initState
方法中的条件,无法实例化
FocusNode
。因此出现了错误(
方法'dispose'在null上被调用。

要修复此问题,可以在调用
dispose
方法中的
FocusNode
s上的
dispose()
之前检查条件


更新:您可以使用
表示的
空感知运算符,而不是
IF
检查。

在下面添加了一个示例:

@覆盖
无效处置(){
//TODO:实现dispose
_titleFocus?.dispose();
_descriptionFocus?.dispose();
_todoFocus?.dispose();
}
super.dispose();
}

代替if检查您可以在dispose ie.?.dispose()中的每个焦点节点上使用null-aware运算符。谢谢您的提示,更新了答案以指定
null-aware运算符。
=>
?。
可以代替
if
检查。如果我的答案帮助您解决了原始帖子中指定的问题,请接受并投票@sazinsaminin代替if检查,您可以在dispose ie.?.dispose()中的每个焦点节点上使用null-aware运算符。谢谢您的提示,更新了答案以指定
null-aware运算符。
=>
?。
可以代替
if
检查。如果我的答案帮助您解决了原始帖子中指定的问题,请接受并投票@萨津萨明
 @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();
}