在 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 方法中的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

以上是关于在 Flutter 中,方法 'dispose' 被调用为 null的主要内容,如果未能解决你的问题,请参考以下文章

Flutter,admob dispose有时不起作用

flutter 路由监听友盟页面统计方案

Flutter的setState更新原理和流程

关于 flutter_boost监听flutter页面生命周期

关于 flutter_boost监听flutter页面生命周期

Flutter - 使用依赖注入时何时关闭流