当我在Flutter上与任何控制器一起使用dispose时发生了什么



问题是当我用任何控制器(例如TextEditingController(调用.dispose((功能时发生了什么。

下面有一个示例代码:

class SearchPage extends StatefulWidget {
const SearchPage({Key? key}) : super(key: key);
@override
State<SearchPage> createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage> {
final TextEditingController _searchController = TextEditingController();
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_searchController.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Search Page"),
),
);
}
}

我在网上搜索过,但找不到满意的答案。那么,当我使用_searchController.dispose((时会发生什么呢?

据我所知,这个方法是在从小部件树中删除之前被调用的。就像一种清理方法。所以在你处理了一些东西之后,你就不能再访问它了,如果你仍然试图访问它,它会抛出一个错误

  • 它检查对象是否仍在使用中
  • 检查侦听器是否为null
@mustCallSuper
void dispose() {
assert(_debugAssertNotDisposed());
assert(() {
_debugDisposed = true;
return true;
}());
_listeners = _emptyListeners;
_count = 0;
}

丢弃对象使用的任何资源。调用后,对象不处于可用状态,应该丢弃(对addListener的调用将在对象被丢弃后抛出(

也可以在末端部分使用super.dispose((。

@override
void dispose() {
_searchController.dispose();
super.dispose();
}

状态处理

当此对象从树中永久删除时调用。

一旦处理了某个东西,它就会从树中永久删除。

你可以查看这个问题

相关内容

最新更新