Android 方法';处置';在颤振中被调用为空
我想在Flatter中创建一个待办应用程序,为了使用focusNode,我编写了以下代码->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
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();
}