在 Flutter 中,方法 'dispose' 被调用为 null
Posted
技术标签:
【中文标题】在 Flutter 中,方法 \'dispose\' 被调用为 null【英文标题】: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()
【问题讨论】:
【参考方案1】:“当我想创建一个新的并将焦点传递给另一个时,它不起作用。”
由于initState
方法中的条件,FocusNode
没有被实例化。因此出现错误 (The method 'dispose' was called on null.
)。
要解决此问题,您可以在dispose
方法中的FocusNode
s 上调用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以上是关于在 Flutter 中,方法 'dispose' 被调用为 null的主要内容,如果未能解决你的问题,请参考以下文章
关于 flutter_boost监听flutter页面生命周期