我有这个初始化状态方法:
@override
void initState() {
super.initState();
getNumber(index).then((number) {
if (number> 1000) {
number = number/ 1000;
setState(() {
flag = true;
_num = number.toInt().toString();
});
} else {
setState(() {
_num = number.toInt().toString();
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
如果您对不再出现在窗口小部件树中的窗口小部件(例如,其父窗口小部件在其构建中不再包含该窗口小部件)的状态对象调用 setState() ,则会发生此错误。当代码从计时器或动画回调调用 setState() 时,可能会发生此错误。首选的解决方案是取消计时器或停止监听 dispose() 回调中的动画。另一种解决方案是在调用 setState() 之前检查此对象的“mounted”属性,以确保该对象仍在树中。
如果调用 setState() ,则此错误可能表示内存泄漏,因为另一个对象在从树中删除后仍保留对此 State 对象的引用。为避免内存泄漏,请考虑在 dispose() 期间中断对此对象的引用。
我如何以正确的方式使用处置?
我有 2 个页面,每个页面都有相同的功能,initState返回一个列表。
第一页具有常规功能,第二页具有相同的功能,但带有返回过滤列表的过滤器。
问题是,当我按第二页中的“后退按钮”并返回第一页时,我得到的是过滤列表而不是常规列表。
在转到第一页之前如何“清除”第二页的数据?
功能:
Future fetchProducts({flag = false}) {
return http
.get(
'MyAddress')
.then<Null>((http.Response response) {
final Map<String, dynamic> listData = json.decode(response.body);
listData.forEach((String id, dynamic fetchedData) {
final Product product = Product(
id: id,
address: fetchedData['address'],
image: fetchedData['imageUrl'],
);
fetchedData.add(product);
});
_product = flag
? fetchedData.where((Product product) {
return product.userId == 1;
}).toList()
: fetchedData;
});
}
Run Code Online (Sandbox Code Playgroud)