saz*_*min 1 android dispose focus widget flutter
我想在 flutter 中制作 to do 应用程序,为了使用 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();
}
Run Code Online (Sandbox Code Playgroud)
我首先在代码下方启动 FocusNode,该 focusNode 在退出待办任务对象时可以正常工作,但是当我想创建新的任务对象并将焦点传递给另一个对象时,它不起作用。我使用这段代码来传递焦点......
focusNode: _titleFocus,
_descriptionFocus.requestFocus();
Run Code Online (Sandbox Code Playgroud)
但它出错并显示消息 ->
The following NoSuchMethodError was thrown while finalizing the widget tree:
The method 'dispose' was called on null.
Receiver: null
Tried calling: dispose()
Run Code Online (Sandbox Code Playgroud)
“当我想创建一个新的并将焦点传递给另一个时,这是行不通的。”
由于方法中的条件,该方法FocusNode不会被实例化initState。因此出现错误( The method 'dispose' was called on null.)。
要修复此问题,您可以在调用方法中的 sdispose()之前检查条件。FocusNodedispose
@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();
}
Run Code Online (Sandbox Code Playgroud)
更新:IF您可以使用以下null aware operator表示的方法来代替检查?.:
添加了下面的示例:
@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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2781 次 |
| 最近记录: |