我在Model
中有要执行的代码。我为Model
提供了Provider
。但是,如果Model
在完成执行之前被处置,则会出现错误:
E / flutter(26180):[错误:flutter / lib / ui / ui_dart_state.cc(148)] 未处理的异常:处理后使用了模型。电子/颤振 (26180):在模型上调用dispose()后,它就无法再使用 被使用。
例如,如果用户按下后退按钮,Model
就会被处置。这是因为Navigator.pop()
仅是此小部件的作用域。
但这意味着我无法在Model
中捕获错误吗?
我的代码:
Model
处置后如何在模型中捕获错误?
答案 0 :(得分:7)
我只是遇到了同样的问题。
发生错误是因为您在ChangeNotifier
之后使用了notifyListeners()
方法之一,通常是dispose()
(我假设您正在调用,但是没有粘贴代码)已被调用。顺便说一下,这是一个断言错误,因此仅在调试版本中。
要摆脱该错误,您可以在使用自己的标志调用notifyListeners()
之前检查对象是否已被处置:
class Model extends ChangeNotifier {
bool error = false;
bool isDisposed = false;
func() {
try {
await execute();
error = false
} catch {
error = true;
print(e.toString());
}
if (!isDisposed) {
notifyListeners();
}
}
@override
void dispose() {
isDisposed = true;
super.dispose();
}
}